【SpringCloud】OpenFeign高级特性
文章目录
- 【SpringCloud】OpenFeign高级特性
- 1. 超时控制
- 1.1 全局配置
- 1.2 指定配置
- 2. 重试机制
- 3. 替换Http客户端
- 3.1 引入依赖
- 3.2 配置
- 4. 请求/响应压缩
- 5. 日志打印
- 6. 综合配置
1. 超时控制
默认OpenFeign客户端等待60秒钟,但是服务端处理超过规定时间会导致Feign客户端返回报错。
为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制,默认60秒太长或者业务时间太短都不好
1.1 全局配置
spring:cloud:openfeign:client:config:default:#连接超时时间connectTimeout: 3000#读取超时时间readTimeout: 3000
1.2 指定配置
如果A服务想让B服务的超时时间为2s,C服务想让B服务的超时时间为1s,那么全局配置就合适了,应该使用指定配置。
在服务消费方配置文件中根据调用服务名进行配置:
spring:openfeign:client:config:#default:#连接超时时间#connectTimeout: 3000#读取超时时间#readTimeout: 3000#服务名cloud-payment-service:#连接超时时间connectTimeout: 1000#读取超时时间readTimeout: 1000
注意:如果全局配置和指定配置同时存在,则以指定配置为主。
2. 重试机制
OpenFeign 的重试机制默认是关闭的,需要手动开启。
新建如下配置类:
@Configuration
public class FeignConfig {@Beanpublic Retryer myRetryer() {//return Retryer.NEVER_RETRY; //Feign默认配置是不走重试策略的//最大请求次数为3(1+2),初始间隔时间为100ms,重试间最大间隔时间为1sreturn new Retryer.Default(100, 1, 3);}
}
由于先前配置了超时时间为1s,所以重试之后的时间为3s:
3. 替换Http客户端
OpenFeign中 http client 如果不做特殊配置,OpenFeign默认使用JDK自带的 HttpURLConnection 发送HTTP请求,由于默认HttpURLConnection没有连接池、性能和效率比较低,所以我们采用阿帕奇的Http客户端替换掉它。
3.1 引入依赖
<!-- httpclient5-->
<dependency><groupId>org.apache.httpcomponents.client5</groupId><artifactId>httpclient5</artifactId><version>5.3</version>
</dependency>
<!-- feign-hc5-->
<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-hc5</artifactId><version>13.1</version>
</dependency>
3.2 配置
# Apache HttpClient5 配置开启
spring:cloud:openfeign:httpclient:hc5:enabled: true
4. 请求/响应压缩
对请求和响应进行GZIP压缩,Spring Cloud OpenFeign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。
spring:cloud:openfeign:compression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true
5. 日志打印
OpenFeign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。
OpenFeign 日志有四个级别:
- NONE:默认的,不显示任何日志。
- BASIC:仅记录请求方法、URL、响应状态码及执行时间
- HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息
- FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据。
开启日志打印步骤如下:
1)创建配置类:
@Bean
Logger.Level feignLoggerLevel() {return Logger.Level.FULL;
}
2)yml配置:
# feign日志以什么级别监控哪个接口
logging:level:com:zhj:cloud:apis:PayFeignApi: debug
注意:公式为:logging.level + 含有@FeignClient注解的完整带包名的接口名 + debug
6. 综合配置
server:port: 80spring:application:name: cloud-consumer-openfeign-ordercloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}openfeign:client:config:default:#连接超时时间connectTimeout: 3000#读取超时时间readTimeout: 3000cloud-payment-service:#连接超时时间connectTimeout: 1000#读取超时时间readTimeout: 1000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true# feign日志以什么级别监控哪个接口
logging:level:com:zhj:cloud:apis:PayFeignApi: debug