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

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.lryc.cn/news/2402718.html

相关文章:

  • 007-nlohmann/json 项目应用-C++开源库108杰
  • 移动端测试岗位高频面试题及解析
  • gvim比较两个文件不同并合并差异
  • App使用webview套壳引入h5(二)—— app内访问h5,顶部被手机顶部菜单遮挡问题,保留顶部安全距离
  • Git GitHub Gitee
  • 《深度体验 Egg.js:打造企业级 Node.js 应用的全景指南》
  • 蓝桥杯2118 排列字母
  • Python应用break初解
  • PLSQLDeveloper配置OracleInstantClient连接Oracle数据库
  • 高股息打底+政策催化增强+永续经营兜底
  • 双电机差速控制的MATLAB Simulink仿真方案,使用PWM和PID调节实现360°转向与速度控制_可复现,有问题请联系博主
  • 【Oracle】触发器
  • 基于深度学习的无人机轨迹预测
  • git连接本地仓库以及gitee
  • 使用Python和OpenCV实现图像识别与目标检测
  • 麒麟v10系统的docker重大问题解决-不支持容器名称解析
  • 基于5G下行信号的模糊函数分析matlab仿真,对比速度模糊函数和距离模糊函数
  • Selenium自动下载浏览器驱动
  • 数据库优化实战分享:高频场景下的性能调优技巧与案例解析
  • Redis 过期了解
  • 微信小程序前端面经
  • android 之 Tombstone
  • 六级作文模板笔记
  • JAVA理论-JAVA基础知识
  • 免费无限使用GPT Plus、Claude Pro、Grok Super、Deepseek满血版
  • SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
  • 深入解析 Java ClassLoader:揭开 JVM 动态加载的神秘面纱
  • CICD实战(一) -----Jenkins的下载与安装
  • 【.net core】.KMZ文件解压为.KML文件并解析为GEOJSON坐标数据集。附KML处理多线(LineString)闭环问题
  • Python打卡训练营day46——2025.06.06