服务调用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;
    }
}
原文地址:https://www.cnblogs.com/xuweiweiwoaini/p/13764533.html