【问题标题】:Getting HystrixRuntimeException: Function timed-out and fallback failed获取 HystrixRuntimeException:函数超时和回退失败
【发布时间】:2021-12-14 01:00:46
【问题描述】:

我正在使用 hystrix 1.5.3 并在我的本地机器上运行这段代码。

@HystrixCommand (groupKey = "BookService", commandKey = "BookService.BookDetail", commandProperties = {
            @HystrixProperty (name = EXECUTION_ISOLATION_STRATEGY, value = "THREAD"),
            @HystrixProperty (name = CIRCUIT_BREAKER_ENABLED, value = "true"),
            @HystrixProperty (name = EXECUTION_TIMEOUT_ENABLED, value = "true"),
            @HystrixProperty (name = EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "1500")}, threadPoolProperties = {
            @HystrixProperty (name = CORE_SIZE, value = "60"),
            @HystrixProperty (name = MAX_QUEUE_SIZE, value = "60"),
            @HystrixProperty (name = QUEUE_SIZE_REJECTION_THRESHOLD, value = "60"),
            @HystrixProperty (name = KEEP_ALIVE_TIME_MINUTES, value = "1")
    })
    public String getBookDetail(String bookId)
    {
       log.info("Getting details");
       ...
    }

在我们的服务器上它工作正常,但是我在本地机器上得到了这个运行时异常。我的本地服务器只是等待超时持续时间,最后抛出这个 HystrixRuntimeException。另外,我没有定义任何后备,但我的情况不需要它。期望它应该像在我们的生产服务器中一样正常工作。

com.netflix.hystrix.exception.HystrixRuntimeException: BookService.BookDetail timed-out and fallback failed.
    at com.netflix.hystrix.AbstractCommand$21.call(AbstractCommand.java:793) ~[hystrix-core-1.5.3.jar:1.5.3]
    at com.netflix.hystrix.AbstractCommand$21.call(AbstractCommand.java:768) ~[hystrix-core-1.5.3.jar:1.5.3]
    at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$1.onError(OperatorOnErrorResumeNextViaFunction.java:77) ~[rxjava-1.0.12.jar:1.0.12]
    at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) ~[rxjava-1.0.12.jar:1.0.12]
    at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) ~[rxjava-1.0.12.jar:1.0.12]
    at com.netflix.hystrix.AbstractCommand$DeprecatedOnFallbackHookApplication$1.onError(AbstractCommand.java:1448) ~[hystrix-core-1.5.3.jar:1.5.3]
    at com.netflix.hystrix.AbstractCommand$FallbackHookApplication$1.onError(AbstractCommand.java:1373) ~[hystrix-core-1.5.3.jar:1.5.3]
    at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:70) ~[rxjava-1.0.12.jar:1.0.12]

我检查了函数没有被执行,因为日志没有被打印出来。 当我通过修改 EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS 来更改超时时,类似的行为会在新的超时持续时间之后发生。 当我删除 @HystrixCommand 注释时,它工作正常,所以这意味着只有 Hystrix 存在一些问题。 hystrix 属性似乎是注释中定义的属性,看起来很好。这可能是因为 hystrix 配置不正确吗?任何帮助将不胜感激。

【问题讨论】:

    标签: java hystrix


    【解决方案1】:

    您的函数没有在 1500 毫秒内执行。

    将 EXECUTION_TIMEOUT_ENABLED 改为 false,hystrix 不会让你的方法超时。

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 2010-09-08
      • 1970-01-01
      • 2020-07-21
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      相关资源
      最近更新 更多