背景

最近在排查一个关于超时时间的bug,跟踪代码发现了一个以前没注意到的点

https://github.com/spring-cloud/spring-cloud-openfeign/issues/324

问题

1
2
3
4
5
# org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingProperties
if (config.getConnectTimeout() != null && config.getReadTimeout() != null) {
builder.options(new Request.Options(config.getConnectTimeout(),
config.getReadTimeout()));
}

在使用配置文件设置feign-client的时候,只有readTimeout和connectTimeout配置同时设置才会起效,具体的判断逻辑在org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingProperties中。

解决方案

升级依赖(推荐)

https://github.com/spring-cloud/spring-cloud-openfeign/issues/324

可以看到在新版本中已经修复了这个问题

同时设置readTimeout和connectTimeout

1
2
3
4
5
6
feign:
client:
config:
xxx:
readTimeout: xx
connectTimeout: xx

使用配置类

使用配置类设置readTimeout和connectTimeout的时候两个参数必须同时传递