A服务调用B服务,如果B服务一直不返回响应,A服务不可能一直等待。于是就需要设置一个等待时间,等待时间分为2种:连接等待时间、读取数据等待时间,OpenFegin支持对这两种时间进行设置。其粒度可以控制到某个FeginClient接口上。
配置方式有以下几种:
- Yanl配置ribbon
- Yaml配置Feign客户端
- 指定Configuration方式配置
- Hystrix引入后的配置
Yaml配置Ribbon
server:
port: 10004
ribbon:
# 指的是建立链接后从服务器读取可用资源所用的时间
ReadTimeout: 5000
# 值的是建立链接所用的时间,适用于网络状况正常的情况下, 两端链接所用的时间
ConectTimeout: 1000
Ribbon只能控制全局超时时间。可以被下面的fegin配置覆盖
Yaml配置Fegin客户端
feign:
client:
config:
default:
connectTimeout: 1000
readTimeout: 1000
provider1:
connectTimeout: 1000
readTimeout: 1000
再次强调,如果ribbon的配置和fegin的配置同时存在,fegin获胜
指定Configuration的方式配置
public class ProviderClientConfiguration {
@Bean
public 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: true
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
解决方式就是配置hystrix
feign:
hystrix:
enabled: true
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 60000
总结
OpenFegin配置超时时间的方式一般使用第4种,因为一般会引入Hystrix做熔断。控制粒度的话是FeignClient接口的粒度,如果想控制到方法级别,需要自己去实现。