A服务调用B服务,如果B服务一直不返回响应,A服务不可能一直等待。于是就需要设置一个等待时间,等待时间分为2种:连接等待时间、读取数据等待时间,OpenFegin支持对这两种时间进行设置。其粒度可以控制到某个FeginClient接口上。
配置方式有以下几种:
- Yanl配置ribbon
- Yaml配置Feign客户端
- 指定Configuration方式配置
- Hystrix引入后的配置
Yaml配置Ribbon
server:port: 10004ribbon:# 指的是建立链接后从服务器读取可用资源所用的时间ReadTimeout: 5000# 值的是建立链接所用的时间,适用于网络状况正常的情况下, 两端链接所用的时间ConectTimeout: 1000
Ribbon只能控制全局超时时间。可以被下面的fegin配置覆盖
Yaml配置Fegin客户端
feign:client:config:default:connectTimeout: 1000readTimeout: 1000provider1:connectTimeout: 1000readTimeout: 1000
再次强调,如果ribbon的配置和fegin的配置同时存在,fegin获胜
指定Configuration的方式配置
public class ProviderClientConfiguration {@Beanpublic Request.Options options(){//return new Request.Options(5000,5000);return new Request.Options(5, TimeUnit.SECONDS,5,TimeUnit.SECONDS,true);}}-----------------------------------------@FeignClient(name = "provider-nacos",contextId ="provider",configuration = ProviderClientConfiguration.class)public interface ProviderClient {@GetMapping("test")String test();}
Hystrix引入后配置
在hystrix引入之后,下面的超时时间配置是不生效的
feign:hystrix:enabled: trueclient:config:default:connectTimeout: 5000readTimeout: 5000

解决方式就是配置hystrix
feign:hystrix:enabled: trueclient:config:default:connectTimeout: 5000readTimeout: 5000hystrix:command:default:execution:timeout:enabled: trueisolation:thread:timeoutInMilliseconds: 60000
总结
OpenFegin配置超时时间的方式一般使用第4种,因为一般会引入Hystrix做熔断。控制粒度的话是FeignClient接口的粒度,如果想控制到方法级别,需要自己去实现。
