当前位置: 首页 > news >正文

SpringCloud——OpenFeign

概述:

OpenFeign是基于Spring的声明式调用的HTTP客户端,大大简化了编写Web服务客户端的过程,用于快速构建http请求调用其他服务模块。同时也是spring cloud默认选择的服务通信工具。

使用方法:

 RestTemplate手动构建:

// 带查询参数的Get请求
String url = "https://api.example.com/users?name={name}&age={age}";
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
params.put("age", 25);
User users = restTemplate.getForObject(url, User.class, params);
// 简单Post请求
String url = "https://api.example.com/users";
User newUser = new User("John", "Doe");
User createdUser = restTemplate.postForObject(url, newUser, User.class);

OpenFeign声明式接口:

相较于RestTemplate和OkHttp完整构建请求头、请求体和url的过程。OpenFeign支持声明服务接口类,并使用springMVC的风格定义请求(@RequestMapping)。

@FeignClient(name = " ",url=" ")

我们需要创建一个接口并使用@FeingClient注解声明接口

  • 没有使用nacos,则我们需要在url中指定对应模块的http地址(包含IP和端口)
  • 使用了nacos,则@FeingClient会通过name获取对应实例列表(动态服务发现),并通过负载均衡获取其中一个健康实例的IP和端口等信息(负载均衡)
  • FeignClient最后会在FeignClientFactory中拼接模块实例的IP、端口和当前接口方法的RequestMapping信息生成构建好的http客户端对象(动态代理对象)并注入到spring容器中
// 启用组件
@SpringBootApplication
@EnableDiscoveryClient  // 启用Nacos服务发现(可选,选择后可通过FeignClient注解的name属性获取对应模块实例列表)
@EnableFeignClients     // 启用OpenFeign(为FeignClient生成动态代理对象并注入到spring容器中)
public class Application { }
// 如果未结合服务注册(Nacos)则需要硬编码指定url
@FeignClient(name = "user-service",url = "")
public interface UserClient {@GetMapping("/users/{id}")User getUser(@PathVariable Long id);
}
// 扫描对应包下的FeignClient接口(一般放在公共依赖中)
@EnableFeignClients(basePackages = "com.example.feign.api")
@SpringBootApplication
public class OrderApplication { ... }

补充:

整合了OpenFeign和Nacos后才能通过name属性发现nacos中注册好的模块实例列表并通过Ribbon或LoadBalancer的负载均衡策略选择适合的健康实例,构建对应的代理对象到spring容器中。

我们可以实现RequestInterceptor接口来对请求进行拦截,实现请求的精细控制。

http://www.dtcms.com/a/233695.html

相关文章:

  • 大模型的开发应用(七):大模型的分布式训练
  • AtCoder-abc408_b 解析
  • snprintf函数用法及注意事项详解
  • 【鸿蒙在 ETS (Extendable TypeScript) 中创建多级目录或文件,可以使用鸿蒙的文件系统 API】
  • 力扣刷题Day 71:搜索旋转排序数组(33)
  • Win10、Win11系统,使用谷歌浏览器文件流下载,C盘剩余容量小于4GB时,下载失败问题
  • 我的创作纪念日——聊聊我想成为一个创作者的动机
  • 25.6.5学习总结
  • 风机下引线断点检测算法实现
  • 系统思考持续训练
  • 【Redis】笔记|第10节|京东HotKey实现多级缓存架构
  • 简化复杂系统的优雅之道:深入解析 Java 外观模式
  • AI大模型在测试领域应用案例拆解:AI赋能的软件测试效能跃迁的四大核心引擎(顺丰科技)
  • Q: 数据库增删改查的逻辑如何实现?
  • 软件测试基础知识总结
  • 08_10小结
  • 八:操作系统设备管理之磁盘调度算法
  • 前端面试题之浏览器存储技术Cookie、LocalStorage、SessionStorage、indexDB
  • [蓝桥杯]后缀表达式
  • Scrum基础知识以及Scrum和传统瀑布式开发的区别
  • STL优先级队列的比较函数与大堆小堆的关系
  • I.MX6ULL裸机的EPIT实验
  • 贪心,回溯,动态规划
  • 从零发布一个 Vue 3 Button 组件到 npm(基于 Vite)
  • 更改安卓虚拟机屏幕大小
  • 计算机基础知识(第四篇)
  • 2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题
  • 农田水利如何「聪明」起来?Modbus转Ethernet IP破解设备互联
  • 洛谷题目:P2761 软件补丁问题 (本题简单)
  • linux下覆盖率测试总结