无法配置Feign客户端超时

时间:2017-10-02 13:26:57

标签: java spring spring-cloud-netflix spring-cloud-feign

我使用带有禁用负载均衡器的Feign客户端

@FeignClient(name = "my-client", url = "${myHost}", configuration = ClientContext.class)

因此,所有功能区属性都将被忽略。 我试图通过不同的方式设置自定义超时,但是Feign忽略所有这些并在60秒后抛出TimeoutException。 我尝试使用的方式: 在ClientContext中: 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)

您能否建议我正确配置或发现上面的代码块有什么问题?

3 个答案:

答案 0 :(得分:2)

还有一种方法可以仅通过配置来实现。

添加到您的application.yml

feign:
  client:
    config:
      my-client:
        connectTimeout: 10000
        readTimeout: 300000

答案 1 :(得分:0)

正确的解决方案是

@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

答案 2 :(得分:0)

我认为您放错了 default 属性。

使用默认超时属性的正确方法是:

feign.client.config.default.connectTimeout=xxxx
feign.client.config.default.readTimeout=xxxx

这些将适用于所有假客户端。如果您想将其应用于特定客户,您可以参考其他答案。