Feign Client的超时时间配置
公司使用Spring Cloud微服务架构中,都是利用Feign进行服务间的调用,因为最近业务更改,服务繁杂响应时间边长,需要优化超时时间的配置。1.Feign配置# 默认开启feign.httpclient.enabled=false# 默认关闭feign.okhttp.enabled=true# 默认关闭feign.hystrix.enabled=false# 默认关闭feign.sentin
·
公司使用Spring Cloud微服务架构中,都是利用Feign进行服务间的调用,因为最近业务更改,服务繁杂响应时间边长,需要优化超时时间的配置。
1.Feign配置
# 默认开启
feign.httpclient.enabled=false
# 默认关闭
feign.okhttp.enabled=true
# 默认关闭
feign.hystrix.enabled=false
# 默认关闭
feign.sentinel.enabled=true
# default context 连接超时时间
feign.client.config.default.connectTimeout = 5000
# default context 读超时时间
feign.client.config.default.readTimeout = 10000
2.Hystrix配置
# 全局设置超时:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 30000
3.Ribbon配置
# 连接超时时间,默认为1秒,该值会被FeignClient配置connectTimeout覆盖
ribbon.ConnectTimeout=5000
# 读超时时间,默认为1秒,该值会被FeignClient配置readTimeout覆盖
ribbon.ReadTimeout=5000
# 最大重试次数
ribbon.MaxAutoRetries=1
4.OkHttp的配置
由于Feign所设置的连接时间和超时时间最后会将OkHttpClient中的配置给覆盖掉。直接配置OkHttpClient是无效的。解决方案如下:添加一个拦截器即可
@Bean("HttpClient")
public OkHttpClient okHttpClient(ConnectionPool connectionPool) {
return new OkHttpClient().newBuilder().connectionPool(connectionPool)
// 该值在FeignClient体系中会被动态覆盖
.connectTimeout(6, TimeUnit.SECONDS)
// 该值在FeignClient体系中会被动态覆盖
.readTimeout(VmcConstants.TEN_SECONDS, TimeUnit.SECONDS)
// 添加拦截器,支持动态设置超时时间
.addInterceptor(new OkHttpClientDynamicTimeoutInterceptor())
.eventListener(eventListener())
.build();
}
注:关于配置Hystrix和Ribbon的超时时间配置
Feign的请求方式是先Hystrix然后Ribbon,Hystrix在最外层则熔断时间必须大于Ribbon的(ConnectTimeout + ReadTimeout)。而且如果Ribbon开启了重试机制,还需要计算对应的重试次数,保证在Ribbon的超时时间*重试次数这个时间范围内,Hystrix的熔断时间不会超时。
Feign的请求流程大致如下:
更多推荐
已为社区贡献1条内容
所有评论(0)