当前位置: 首页 > 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接口来对请求进行拦截,实现请求的精细控制。

相关文章:

  • 大模型的开发应用(七):大模型的分布式训练
  • 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和传统瀑布式开发的区别
  • 网站专题页是什么/网址大全实用网址
  • 网站怎么做响应/百度统计数据分析
  • 用.net做网站好_还是用php/百度应用市场app下载安装
  • 太原有哪些做网站的公司/免费seo优化工具
  • 网站开发专业/螺蛳粉的软文推广
  • 做网站需要编程嘛/百度号码认证平台官网首页