SpringCloud学习:Openfeign组件实现服务调用和负载均衡

OpenFeign:服务调用与负载均衡(服务端接口)

  1. 是什么:通过OpenFeign可以实现服务调用和负载均衡
    1. OpenFeign是一个声明性web服务客户端,
  2. 怎么用:服务提供者提取公共接口用@FrignClient标注,服务调用者POM,yml,主启动,然后业务类
    1. 当使用RestTemplate实现服务调用时,要在每个微服务中定义RestTemplate对象 ,然后手动设置要调用的微服务的名字,再使用该对象对该微服务进行调用;此时每个要调用服务的微服务都要定义一个RestTemplate对象
    2. 为了解决这一问题,引入了OpenFeign:此时只需将服务提供者所提供的方法在公共微服务中相应的接口中声明 ,并用@FeignClients('服务提供者名')标注该接口 (此时公共微服务要引入spring-cloud-starter-openfeign依赖 才可使用@FeignClients注解),此时就代表服务提供者将其要提供的服务放到公共的接口中 ,该接口中的方法必须与所提供的服务方法有一致的路径@XxxMapping(),接口方法名字可以不相同
    3. 服务调用者要调用对应微服务提供的服务时,就可以使用openfrign进行调用首先要在该微服务中引入spring-cloud-starter-openfeignPOM依赖 ,然后改yml,然后再修改启动类,加入@EnableFeign注解来开启OpenFeign ,然后此时在controller中通过自动装配定义要调用服务所提供的接口类对象 ,然后就可以通过该对象调用对应的方法实现对应的服务
  3. 超时控制:在yml中设置全局或者单个超时时间
    1. 在调用者通过Openfeign调用微服务时,会有两个关于超时的配置,分别是connectTimeout和readTimeout
    2. connectTimeout是调用者连接到提供者的超时控制,而readTimeout是连接上后完成服务调用直到返回所限制的超时时间 ,默认是60秒,即当服务调用时间超过60s未返回时就会报错
    3. 可以在服务调用者客户端上通过修改yml文件来配置超时时间 (谁发起调用就配置谁的yml文件),通过修改 spring.cloud.openfeign.client.config.dafault.readtimeout 来设置全局请求(所有调用请求)的超时控制,也可以单独指定某个服务调用的超时控制,通过修改 spring.cloud.openfeign.client.config.服务名.readtimeout 来实现,两个可以共存,且单个配置会覆盖全局配置
  4. 重试机制:默认是关闭的,只要第一个调用失败则直接返回(在配置类开启重试机制)
    1. 可以开启重试机制,当调用失败后会重新发起请求
    2. 在调用者客户端微服务中创建FeignConfig配置类@Configuration注解标注,然后用@Bean注解标注 Retry myRetry(){} 方法,在该方法中默认 return Retry.NEVER_RETRY;(默认是不进行重试的),此时可以修改return Retry.default(初次间隔时间,最大间隔时间,请求总次数)来开启重试机制,此时当第一次请求失败后,会间隔时间后重新发起调用请求,直到规定次数失败后才会返回报错
  5. 性能优化HttpClient5 :一定要替换!!先引入POM依赖再在yml中进行配置
    1. OpenFeign默认使用JDK中自带的HttpClient.HttpURLConnection发送HTTP请求,没有连接池、性能和效率也比较低,此时就可以修改OpenFeign的连接
    2. 此时可以使用Apache 的HttpClient5来替换以提高性能 ,先修改POM中的依赖,导入HC5的依赖,然后修改调用者的yml配置文件spring.cloud.openfeign.httpclient.hc5.enabled=true,以开启HC5来替换默认的HttpClient
  6. 请求回应压缩:直接在yml中开启压缩
    1. 使用OpenFeign进行服务调用时可以对请求和回应进行GZIP压缩,以减少通信过程中性能损耗,要通过参数 **spring.cloud.openfeign.compression.request/response.enabled=true 来开启请求和回应的数据压缩
  7. 日志打印:对Feign的接口调用情况进行监控和输出先在配置类开启日志级别,再在yml中配置对哪个接口进行监控
    1. 先在配置类开启日志级别,再在yml中配置对哪个接口进行监控
    2. 首先要在需要开启日志功能的客户端微服务中的FeignConfig配置类中配置@Bean:Logger.Level返回所选择开启的日志级别Logger.Level.Xxx ,然后在yml配置文件中开启日志功能提供设置logging.level.含有@FeignClient注解的接口的完整包名和接口名=debug 表示开启日志监控哪个接口的调用情况![[Pasted image 20241011152041.png]]
    3. OpenFeign提供日志打印功能,了解请求的细节,对Feign的接口调用情况进行监控和输出,有四个日志级别:NULL、BASIC、HEADER、FULL,默认是NULL不会记录任何日志信息,BASIC记录了请求的url、请求方法等信息,HEADER记录了请求和响应的头信息,FULL全部信息都记录了正文和元数据等
相关推荐
AD钙奶-lalala13 小时前
Mac OS上搭建 http server
java
知识分享小能手13 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao16 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾16 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
皮皮林55117 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_4569042717 小时前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_17 小时前
异步编程CompletionService
java
DKPT17 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa17 小时前
HTML和CSS学习
前端·css·学习·html
sibylyue17 小时前
Guava中常用的工具类
java·guava