1 Feign的配置

  • 从Spring Cloud Edeware开始,Feign支持使用属性自定义。对于一个指定名称的Feign Client(例如该Feign Client的名称是feignName),Feign支持如下的配置项。
  1. # 配置Feign
  2. feign:
  3. client:
  4. config:
  5. feignName: # 自定义FeignClient的名称
  6. connectTimeout: 5000 # 建立连接的超时时间
  7. readTimeout: 5000 # 读取的超时时间
  8. # 配置Feign的日志级别
  9. loggerLevel: full
  10. # Feign的错误解码器,相当于代码配置方式中的ErrorDecoder
  11. errorDecoder: feign.codec.ErrorDecoder.Default
  12. # 配置重试
  13. retryer: feign.Retryer.Default
  14. # 配置请求拦截器
  15. requestInterceptors:
  16. - BasicAuthRequestInterceptor
  17. - BaseRequestInterceptor
  18. # 配置熔断不处理404异常
  19. decode404: false
  • 如果需要改变所有的Feign Client,可使用默认的feign名称创建配置属性:
  1. feign:
  2. client:
  3. config:
  4. default:
  5. connectTimeout: 5000
  6. readTimeout: 5000
  7. loggerLevel: basic

2 请求压缩

  • Spring Cloud Feign支持对请求和响应进行Gzip压缩,以减少通信过程中的性能损耗。通过下面的参数可以开启请求和响应的压缩功能。
  1. # 配置Feign
  2. feign:
  3. compression:
  4. request:
  5. enabled: true # 开启请求压缩
  6. response:
  7. enabled: true # 开启响应压缩
  • 同时,我们也可以对请求的数据类型以及触发压缩大小的下限进行设置:
  1. # 配置Feign
  2. feign:
  3. compression:
  4. request:
  5. enabled: true # 开启请求压缩
  6. min-request-size: 2048 # 设置触发压缩的大小下限
  7. mime-types: text/html,application/xml,application/json #设置压缩的数据类型
  8. response:
  9. enabled: true # 开启响应压缩

3 日志级别

  • 在开发或者运行阶段的时候往往希望看到Feign请求过程的日志记录,默认情况下Feign的日志是没有开启的。如果想要属性配置方式来达到日志效果,只需要在application.yml中添加如下的内容即可:
  1. # 配置Feign
  2. feign:
  3. client:
  4. config:
  5. service-product: # 自定义FeignClient的名称
  6. # 配置Feign的日志级别
  7. loggerLevel: full
  8. logging:
  9. level:
  10. 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的方式开启所有的日志功能:
  1. @Configuration
  2. public class FeignConfiguration {
  3. @Bean
  4. Logger.Level feignLoggerLevel() {
  5. return Logger.Level.FULL;
  6. }
  7. }