当前位置: 首页 > 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.dtcms.com/a/316180.html

相关文章:

  • Spring中七种Propagation类的事务属性详解
  • 研发团队看板协作中的自动化实践:集成CI/CD与任务流转
  • 007TG洞察:高效运营Telegram私域流量:技术挑战与自动化解决方案探索
  • 中科米堆CASAIM自动化三维扫描系统自动测量压铸件尺寸
  • 【原创】基于gemini-2.5-flash-preview-05-20多模态模型实现短视频的自动化二创
  • 从 “看懂图” 到 “读懂视频”:多模态技术如何用文本反哺视觉?
  • 原型模式在C++中的实现与面向对象设计原则
  • 二维数点问题 1
  • 学习日志28 python
  • AI编程新时代:从氛围编程到上下文编程的深度实践和思考
  • 鸿蒙开发、大数据开发、Java开发与前端开发全面对比解析
  • 【银行测试】银行票据项目业务+票据测试点分析(四)
  • 2025《艾诺提亚失落之歌》逆向工程解包尝试
  • Linux网络编程:TCP初体验
  • VirtualBox安装教程
  • 64位程序调用32位dll方法
  • 【Linux系统编程】线程概念与控制
  • 使用valgrind工具检测server端lib库的内存泄漏
  • FT5X06 触摸芯片
  • 【技术教程】如何将 ONLYOFFICE 文档连接到 Confluence
  • nodejs 编程基础01-NPM包管理
  • Android 之 Kotlin
  • 让 Spark 干体力活:用 Java 快速找出最小值
  • GaussDB 并行创建索引
  • Webpack 5 Module Federation 模块共享最佳实践
  • AI智能体的安全困境:防护机制与伦理平衡的艺术
  • 高精度惯性导航IMU传感器供应商价格
  • Python-机器学习初识
  • C结构体的几种定义形式 + typedef结合使用的好处
  • 数分思维14:用户研究与数据分析