春云侧车hystrix超时不火

Posted

技术标签:

【中文标题】春云侧车hystrix超时不火【英文标题】:spring cloud side car hystrix timeout not fire 【发布时间】:2016-03-21 05:03:40 【问题描述】:

我有一个简单的带有侧车的spring cloud应用程序,代码如下:

@SpringBootApplication
@EnableSidecar

public class SidecarApp 
    public static void main(String[] args) 
        SpringApplication.run(SidecarApp.class, args);
    

边车通过zuul调用另一个服务,我正在尝试配置hystrix超时但没有成功!这是我的配置:

server:
  port: 9085

spring:
  application:
    name: cue

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 100
hystrix.command.default.execution.isolation.thread.interruptOnTimeout: true
hystrix.command.default.execution.timeout.enabled: true

sidecar:
  port: 8085
  health-uri: http://localhost:8085/health.json

在这些配置中,我希望如果对其他服务的调用将花费超过 100 毫秒,那么 hystrix 将立即返回,但这不会发生(服务 hystrix 调用需要 10 秒)

我是否配置错误?

注意: 对另一个服务的调用是:http://localhost:9085/cma/myinfo1,所以调用到达 sidecar,cma 是远程服务的 Eureka 名称,它调用服务 cma 中的函数 myinfo1...

【问题讨论】:

您正在使用 yaml 文件进行配置,因此您的名称应该遵循该约定。您的 hystrix 属性是基本属性,不是 yaml 格式。 你可以两种方式,我知道是因为例如属性: hystrix.command.default.fallback.enabled: true 真的改变了 hystrix 回退的行为...... 可能与这个问题有关:github.com/Netflix/Hystrix/issues/354我正在检查它 Zuul 使用信号量隔离,因此 Sidecar 也是如此。 【参考方案1】:

首先,我认为你的 yaml 文件不正确,你应该使用标准格式。

您可以禁用 hystrix 的超时检查:

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false

或者将Zuul的Hystrix隔离策略改为THREAD:

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: THREAD
          thread:
            timeoutInMilliseconds: 10000

【讨论】:

以上是关于春云侧车hystrix超时不火的主要内容,如果未能解决你的问题,请参考以下文章

OpenFeign + Hystrix - 不同客户端的不同超时

使用环境变量设置 Hystrix 超时

无法为功能区和 hystrix 设置超时

Hystrix 默认超时不起作用

转 Hystrix超时实现机制

使用 Netflix Feign 和 Hystrix 设置请求超时