A服务调用B服务,如果B服务一直不返回响应,A服务不可能一直等待。于是就需要设置一个等待时间,等待时间分为2种:连接等待时间读取数据等待时间,OpenFegin支持对这两种时间进行设置。其粒度可以控制到某个FeginClient接口上。
配置方式有以下几种:

  1. Yanl配置ribbon
  2. Yaml配置Feign客户端
  3. 指定Configuration方式配置
  4. Hystrix引入后的配置

    Yaml配置Ribbon

    1. server:
    2. port: 10004
    3. ribbon:
    4. # 指的是建立链接后从服务器读取可用资源所用的时间
    5. ReadTimeout: 5000
    6. # 值的是建立链接所用的时间,适用于网络状况正常的情况下, 两端链接所用的时间
    7. ConectTimeout: 1000

    Ribbon只能控制全局超时时间。可以被下面的fegin配置覆盖

Yaml配置Fegin客户端

  1. feign:
  2. client:
  3. config:
  4. default:
  5. connectTimeout: 1000
  6. readTimeout: 1000
  7. provider1:
  8. connectTimeout: 1000
  9. readTimeout: 1000

再次强调,如果ribbon的配置和fegin的配置同时存在,fegin获胜

指定Configuration的方式配置

  1. public class ProviderClientConfiguration {
  2. @Bean
  3. public Request.Options options(){
  4. //return new Request.Options(5000,5000);
  5. return new Request.Options(5, TimeUnit.SECONDS,5,TimeUnit.SECONDS,true);
  6. }
  7. }
  8. -----------------------------------------
  9. @FeignClient(name = "provider-nacos",contextId ="provider",configuration = ProviderClientConfiguration.class)
  10. public interface ProviderClient {
  11. @GetMapping("test")
  12. String test();
  13. }

Hystrix引入后配置

在hystrix引入之后,下面的超时时间配置是不生效的

  1. feign:
  2. hystrix:
  3. enabled: true
  4. client:
  5. config:
  6. default:
  7. connectTimeout: 5000
  8. readTimeout: 5000

image.png
解决方式就是配置hystrix

  1. feign:
  2. hystrix:
  3. enabled: true
  4. client:
  5. config:
  6. default:
  7. connectTimeout: 5000
  8. readTimeout: 5000
  9. hystrix:
  10. command:
  11. default:
  12. execution:
  13. timeout:
  14. enabled: true
  15. isolation:
  16. thread:
  17. timeoutInMilliseconds: 60000

总结

OpenFegin配置超时时间的方式一般使用第4种,因为一般会引入Hystrix做熔断。控制粒度的话是FeignClient接口的粒度,如果想控制到方法级别,需要自己去实现。