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

微服务—OpenFeign

微服务—OpenFeign

参考项目路径: D:\Users\lenovo\Desktop\Java学习-代码集\Myself_Practice

OpenFeign 是一个声明式的 Http 客户端

开启OpenFeign

①依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

②自动类加注解:

通过 @EnableFeignClients 注解,启用 OpenFeign 功能

③编写 FeignClient

@FeignClient(value="item-service")
public interface itenClient{@GetMapping("/item"){List<ItemDTO>  queryItemByIds(@RequestParam("ids") Collection<Long> ids);}
}

④使用FeignClient 远程调用:

List<ItemDTO> items = itenClient.queryItemByIds(List.of(1,2,3));

连接池

OpenFeign 对 Http 请求做了优雅的伪装, 不过其底层发起 http 请求,依赖于其他的框架。这些框架可以自己选择,包括以下三种:

  • HttpURLConnection : 默认实现,不支持连接池。
  • Apache HttpClient : 支持连接池
  • OKHttp : 支持连接池

具体源码可以参考 FeignBlockingLoadBalancerClient 类中的 delegate 成员变量

OpenFeign 整合 OKHttp 的步骤如下

①引入依赖:

<!--OKHttp -->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId>
</dependency>

②开启连接池功能:

feign:okhttp:enabled: true #开启 OKHttp 连接池功能

实践使用

第一种: 我们可以把各个模块自己的 实体类 和 想要暴漏的 feign 的接口的客户端再分成几个小模块,然后,模块自己编写自己的 feign 的模块,里面编写自己想要展示的 feign 的接口

第二种: 我们可以再新增一个模块,来存放 将会调用的 feign 的 接口和feign接口返回的实体类,

示例:(第二种)

  • 我们新增一个模块,用来存放 feign接口,和 返回的实体类 例如 api-model
  • 首先我们把 openfeign 的相关依赖,引入到 api-model 的pom 中去,这样之后,我们其他模块,在引入api-model 模块之后,就自动引入了openfeign 的相关依赖
  • 然后,我们在其他模块引用 api-model 的依赖之后,就可以直接只用 feignClient 调用其他模块的接口。

当定义的 FeignClient 不在 SpringBootApplication 的扫描包范围的时候,这些 FeignClient 无法使用,有两种方式可以解决:

以下两种注解是在 要使用feign的启动类上面加 (也就是 不是 api-model 这个类的启动类)

方式一: 指定 feignClient 所在的包

@EnableFeignClients(basePackages="com.xjh.api.client")

方式二: 指定FeignClient 字节码

@EnableFeignClients(clients = {UserClient.class})

日志输出

OpenFeign 只会在 FeignClient 所在包的日志级别为 DEBUG 时,才会输出日志,而且其日志级别有四级:

(Feign 默认的日志级别是 NONE ,所以我们默认是看不到日志的)

  • NONE: 不记录任何日志信息,这是默认值
  • BASIC: 仅记录请求的方法、URL以及响应状态码的执行时间
  • HEADERS: 在basic 的基础上,额外记录了请求和响应的头部信息。
  • FULL: 记录所有请求和响应的明细,包括头信息,请求体,元数据。

要自定义日志级别需要声明一个类型为 Logger.level 的 bean ,在其中定义日志级别:

public class MyFeignConfig {public Logger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}

注意!!! 此时我们的 这个 Bean 还未生效,要想配置某个 FeignClient 的日志,可以在 启动类 注解中声明:

@EnableFeignClients( defaultConfiguration = MyFeignConfig.class)

此时,对所有的 feign 客户端,这个日志级别都生效。

也可以 单独配置 ! 我们只需要在 @FeignClient 注解上进行配件就行

@FeignClient(value = "model-name" , configuration = MyFeignConfig.class)
http://www.lryc.cn/news/611130.html

相关文章:

  • 基于PD控制器的四旋翼无人机群飞行控制系统simulink建模与仿真
  • Crawl4AI:开源的AI友好型网页爬虫与数据抓取工具
  • MyBatis实现SQL
  • DM8日常运维命令总结(四)
  • jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
  • 聚焦智能穿戴“下一代消费终端”之争,Meta/微美全息借AI+AR积淀定义行业未来
  • Swift 实战:用队列巧解 LeetCode 346 数据流中的移动平均数
  • 【RabbitMQ】高级特性—持久性、重试机制详解
  • 栈的输入与输出方式
  • 《算法导论》第 4 章 - 分治策略
  • Python Day23程序、进程、线程及多线程实现全解析 例题分析
  • 星图云开发者平台赋能商储油安全管控数字化转型
  • 为什么要选择时序数据库IoTDB?
  • Python爬虫08_Requests聚焦批量爬取图片
  • Pandas 入门:数据分析的得力工具
  • 嵌入式硬件中运放内部底层分析
  • 基于深度学习的医学图像分析:使用CycleGAN实现医学图像风格转换
  • 后量子时代已至?中国量子加密技术突破与网络安全新基建
  • 关于npx react-native run-android下载进程缓慢以及进程卡壳等问题的解决方案。
  • Java 大视界 -- Java 大数据在智能医疗电子病历数据分析与临床决策支持中的应用(382)
  • iOS混淆工具有哪些?技术演进与选型趋势全景解析
  • 企业如何用现代数仓架构挖掘新业务盈利点?AllData产品从目标、路径、结果给出答案
  • Go语言实战案例:使用sync.Mutex实现资源加锁
  • 查看 Redis 某个数据库的内存占用
  • 【前端】网站favicon图标制作
  • 力扣-208.实现Trie(前缀树)
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(六)
  • Linux-Day11.WEB服务,虚拟主机
  • VUE丢失long类型精度,使用 json-bigint 库解析大整数
  • 人工智能领域、图欧科技、IMYAI智能助手2025年7月更新月报