服务调用Feign高级
1 Feign的配置
- 从Spring Cloud Edeware开始,Feign支持使用属性自定义。对于一个指定名称的Feign Client(例如该Feign Client的名称是feignName),Feign支持如下的配置项。
# 配置Feign
feign:
client:
config:
feignName: # 自定义FeignClient的名称
connectTimeout: 5000 # 建立连接的超时时间
readTimeout: 5000 # 读取的超时时间
# 配置Feign的日志级别
loggerLevel: full
# Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
errorDecoder: feign.codec.ErrorDecoder.Default
# 配置重试
retryer: feign.Retryer.Default
# 配置请求拦截器
requestInterceptors:
- BasicAuthRequestInterceptor
- BaseRequestInterceptor
# 配置熔断不处理404异常
decode404: false
- 如果需要改变所有的Feign Client,可使用默认的feign名称创建配置属性:
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
2 请求压缩
- Spring Cloud Feign支持对请求和响应进行Gzip压缩,以减少通信过程中的性能损耗。通过下面的参数可以开启请求和响应的压缩功能。
# 配置Feign
feign:
compression:
request:
enabled: true # 开启请求压缩
response:
enabled: true # 开启响应压缩
- 同时,我们也可以对请求的数据类型以及触发压缩大小的下限进行设置:
# 配置Feign
feign:
compression:
request:
enabled: true # 开启请求压缩
min-request-size: 2048 # 设置触发压缩的大小下限
mime-types: text/html,application/xml,application/json #设置压缩的数据类型
response:
enabled: true # 开启响应压缩
3 日志级别
- 在开发或者运行阶段的时候往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。如果想要属性配置方式来达到日志效果,只需要在application.yml中添加如下的内容即可:
# 配置Feign
feign:
client:
config:
service-product: # 自定义FeignClient的名称
# 配置Feign的日志级别
loggerLevel: full
logging:
level:
com.sunxiaping.order.feign.ProductFeignClient: debug # Feign日志只会对日志级别为debug做出响应
-
logging.level.xxx: debug
:Feign日志只会对日志级别的debug做出响应。 -
feign.client.config.service-product.loggerLevel
:默认Feign的日志级别有四种。- NONE(性能最佳,适用于生产):不记录任何日志(默认值)。
- BASIC(适用于生产环境追踪问题):仅记录请求方法、URL、响应状态码以及执行时间。
- HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
- FULL(比较适用于开发和测试环境定位问题):记录请求和响应的header、body和元数据。
-
也可以使用配置Bean的方式开启所有的日志功能:
@Configuration
public class FeignConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}