当前位置: 首页 > 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.lqws.cn/news/169021.html

相关文章:

  • 6.5本日总结
  • 时序预测模型测试总结
  • 汇编语言综合程序设计:子程序、分支与循环深度解析
  • 【大模型:知识库管理】--开源工具Ragflow介绍+本地搭建
  • I2C通信讲解
  • Linux 下生成动态库时 -fPIC的作用详解
  • Monorepo架构: Lerna、NX、Turbo等对比与应用分析
  • 系统思考持续训练
  • 湖北理元理律所债务优化实践:法律技术与人文关怀的双轨服务
  • 【Zephyr 系列 9】Zephyr 与设备树机制详解:如何为你的板子编写 Devicetree
  • 农田水利如何「聪明」起来?Modbus转Ethernet IP破解设备互联
  • [蓝桥杯]后缀表达式
  • Redis Set集合命令、内部编码及应用场景(详细)
  • Thumb-2指令集及其与STM32的关系
  • float和float32有什么区别
  • 红花基因组2-文献精读141
  • 打卡Day45
  • 从0开始学习R语言--Day17--Cox回归
  • ES集群磁盘空间超水位线不可写的应急处理
  • 【AI News | 20250605】每日AI进展
  • K8S认证|CKS题库+答案| 2. Pod 指定 ServiceAccount
  • 七彩喜智慧养老平台:科技赋能下的市场蓝海,满足多样化养老服务需求
  • OpenStack组件:放置服务(Placement)安装
  • 数据可视化大屏案例落地实战指南:捷码平台7天交付方法论
  • 看板中“进行中”任务过多如何优化
  • 单精度浮点数值 和 双精度浮点数值
  • 基于51单片机的车内防窒息检测报警系统
  • 【运维心得】内存占用虚标真相
  • vue-19(Vuex异步操作和变更)
  • 使用ArcPy进行栅格数据分析(2)