无法配置 Feign Client 超时
Can't configure Feign Client timeouts
我正在使用禁用了负载均衡器的 Feign 客户端
@FeignClient(name = "my-client", url = "${myHost}", configuration = ClientContext.class)
因此,所有功能区属性都将被忽略。
我试图通过不同的方式设置自定义超时,但 Feign 忽略所有这些并在 60 秒后抛出 TimeoutException。
我尝试使用的方式:
在客户端上下文中:
1)
@Value("${feign.connectTimeout:10000}")
private int connectTimeout;
@Value("${feign.readTimeOut:300000}")
private int readTimeout;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeout, readTimeout);
}
2)
@Bean
public Request.Options options() {
return new Request.Options(10_000, 300_000);
}
在 bootstrap.properties 文件中:
1)
feign.client.default.connect-timeout=10000
feign.client.default.read-timeout=300000
2)
feign.client.default.config.connect-timeout=10000
feign.client.default.config.read-timeout=300000
3)
feign.client.default.connectTimeout=10000
feign.client.default.readTimeout=300000
4)
feign.client.default.config.connectTimeout=10000
feign.client.default.config.readTimeout=300000
错误堆栈跟踪是:
Error Message: feign.RetryableException: Read timed out executing GET http://myrequest...
Stacktrace:
feign.FeignException.errorExecuting(FeignException.java:67)
feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:10)
feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
你能建议我正确的配置或发现上面的代码块有什么问题吗?
正确的解决方案是
@Value("${feign.connectTimeout:10000}")
private int connectTimeout;
@Value("${feign.readTimeOut:300000}")
private int readTimeout;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeout, readTimeout);
}
并将这个添加到 .properties 文件中 payer-service-client.feign.hystrix.enabled=false
还有一种方法可以仅通过配置来完成此操作。
添加到您的application.yml
:
feign:
client:
config:
my-client:
connectTimeout: 10000
readTimeout: 300000
我认为您放错了 default
属性。
使用默认超时属性的正确方法是:
feign.client.config.default.connectTimeout=xxxx
feign.client.config.default.readTimeout=xxxx
这些将适用于所有假客户端。如果你想把它应用到特定的客户,你可以参考其他答案。
我正在使用禁用了负载均衡器的 Feign 客户端
@FeignClient(name = "my-client", url = "${myHost}", configuration = ClientContext.class)
因此,所有功能区属性都将被忽略。 我试图通过不同的方式设置自定义超时,但 Feign 忽略所有这些并在 60 秒后抛出 TimeoutException。 我尝试使用的方式: 在客户端上下文中: 1)
@Value("${feign.connectTimeout:10000}")
private int connectTimeout;
@Value("${feign.readTimeOut:300000}")
private int readTimeout;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeout, readTimeout);
}
2)
@Bean
public Request.Options options() {
return new Request.Options(10_000, 300_000);
}
在 bootstrap.properties 文件中: 1)
feign.client.default.connect-timeout=10000
feign.client.default.read-timeout=300000
2)
feign.client.default.config.connect-timeout=10000
feign.client.default.config.read-timeout=300000
3)
feign.client.default.connectTimeout=10000
feign.client.default.readTimeout=300000
4)
feign.client.default.config.connectTimeout=10000
feign.client.default.config.readTimeout=300000
错误堆栈跟踪是:
Error Message: feign.RetryableException: Read timed out executing GET http://myrequest...
Stacktrace:
feign.FeignException.errorExecuting(FeignException.java:67)
feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:10)
feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
你能建议我正确的配置或发现上面的代码块有什么问题吗?
正确的解决方案是
@Value("${feign.connectTimeout:10000}")
private int connectTimeout;
@Value("${feign.readTimeOut:300000}")
private int readTimeout;
@Bean
public Request.Options options() {
return new Request.Options(connectTimeout, readTimeout);
}
并将这个添加到 .properties 文件中 payer-service-client.feign.hystrix.enabled=false
还有一种方法可以仅通过配置来完成此操作。
添加到您的application.yml
:
feign:
client:
config:
my-client:
connectTimeout: 10000
readTimeout: 300000
我认为您放错了 default
属性。
使用默认超时属性的正确方法是:
feign.client.config.default.connectTimeout=xxxx
feign.client.config.default.readTimeout=xxxx
这些将适用于所有假客户端。如果你想把它应用到特定的客户,你可以参考其他答案。