带有 feign 和 hystrix 的 Spring Boot:无法让请求超时工作

Posted

技术标签:

【中文标题】带有 feign 和 hystrix 的 Spring Boot:无法让请求超时工作【英文标题】:Spring boot with feign and hystrix: Can't get request timeouts to work 【发布时间】:2017-10-10 04:04:03 【问题描述】:

我在让 hystrix 超时工作时遇到问题。我创建了一个示例项目来在这里展示这一点:https://github.com/stianlagstad/spring-boot-timeout-demo。

bootstrap.yml 中,我正在设置这样的超时:

hystrix:
  command:
    default:
      execution.isolation.thread.timeoutInMilliseconds: 60000
      circuitBreaker:
        enabled: true
        sleepWindowInMilliseconds: 300000
      fallback.enabled: false
    # My client
    MyFeignClient#getPost:
      execution.isolation.thread.timeoutInMilliseconds: 1

我希望这样做的结果是 hystrix 命令应该在 60 秒后超时,除了 MyFeignClient 中的 getPost 应该在 1 毫秒后超时。不过,我没有看到。 getPost 方法每次都会返回一个答案,我很确定它需要超过一毫秒的时间。

我还尝试使用ConfigurationManager 在测试中手动设置超时,但这似乎也不起作用:https://github.com/stianlagstad/spring-boot-timeout-demo/blob/master/src/test/java/com/example/TimeoutDemoApplicationTests.java

如何使我设置的超时生效?

【问题讨论】:

【参考方案1】:

你需要在两个地方修复你的属性。

首先,添加以下属性。从 dalston 版本开始,feign 的 hystrix 支持是可选的。您的类路径中已经有 hystrix,因此您只需添加以下属性即可。

feign:
  hystrix:
    enabled: true

其次,你为你的 feign 指定了错误的HystrixCommandKey。您需要更改 HystrixCommandKey 如下所示。

MyFeignClient#getPost():

#getPost 后面需要括号。

【讨论】:

以上是关于带有 feign 和 hystrix 的 Spring Boot:无法让请求超时工作的主要内容,如果未能解决你的问题,请参考以下文章

带有 Hystrix 断路器超时的 Spring Cloud Feign 客户端默认为 2 秒

使用 Hystrix 抛出异常的 Feign 客户端

精通springcloud:故障和带有Feign的断路器模式

使用 Hystrix Feign 记录请求和响应 json 有效负载

feign + hystrix 监控和熔断测试

ribbon,feign选择和与Hystrix的整合应用