【问题标题】:Can't configure Feign Client timeouts无法配置 Feign Client 超时
【发布时间】:2018-03-13 13:53:26
【问题描述】:

我正在使用禁用负载均衡器的 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)

你能建议我正确的配置还是发现上面的代码块有什么问题?

【问题讨论】:

  • 你可能使用 hystrix 和 feign,它的超时时间默认是 1s。
  • 我稍后添加了堆栈跟踪。没有提到任何hystrix。会不会是因为hystrix?

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


【解决方案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);
}

并添加到 .properties 文件中payer-service-client.feign.hystrix.enabled=false

【讨论】:

    【解决方案2】:

    还有一种方法可以只通过配置来做到这一点。

    添加到您的application.yml

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

    【讨论】:

      【解决方案3】:

      我认为您放错了default 属性。

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-17
        • 2016-11-25
        • 2018-02-01
        • 1970-01-01
        • 2015-10-12
        • 2016-05-17
        • 2020-08-03
        • 1970-01-01
        • 2016-02-06
        相关资源
        最近更新 更多