Hystrix 命令失败,并显示“超时且无可用回退”

2022-09-01 10:37:59

我注意到我的应用程序中的某些命令失败

Caused by: ! com.netflix.hystrix.exception.HystrixRuntimeException: GetAPICommand timed-out and no fallback available.
out: ! at com.netflix.hystrix.HystrixCommand.getFallbackOrThrowException(HystrixCommand.java:1631)
out: ! at com.netflix.hystrix.HystrixCommand.access$2000(HystrixCommand.java:97)
out: ! at com.netflix.hystrix.HystrixCommand$TimeoutObservable$1$1.tick(HystrixCommand.java:1025)
out: ! at com.netflix.hystrix.HystrixCommand$1.performBlockingGetWithTimeout(HystrixCommand.java:621)
out: ! at com.netflix.hystrix.HystrixCommand$1.get(HystrixCommand.java:516)
out: ! at com.netflix.hystrix.HystrixCommand.execute(HystrixCommand.java:425)
out: Caused by: ! java.util.concurrent.TimeoutException: null
out: !... 11 common frames omitted

这是我的 Hystrix 配置覆盖:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=210000
hystrix.threadpool.default.coreSize=50
hystrix.threadpool.default.maxQueueSize=100
hystrix.threadpool.default.queueSizeRejectionThreshold=50

这是什么样的超时?是外部应用程序的读取/连接超时吗?如何调试此内容?


答案 1

这是一个 Hystrix 命令超时,默认情况下每个命令都启用此超时,您可以使用以下属性定义值:

execution.isolation.thread.timeoutInMilliseconds:此属性以毫秒为单位设置时间,在此时间之后,调用方将观察到超时并离开命令执行。Hystrix 将 hystrixCommand >标记为超时,并执行回退逻辑。

因此,您可以使用以下属性增加超时值或禁用命令的默认超时(如果适用于您的情况):

@HystrixProperty(name = "hystrix.command.default.execution.timeout.enabled", value = "false")

您可以在此处找到更多信息:https://github.com/Netflix/Hystrix/wiki/Configuration#CommandExecution


答案 2

可能是您处于调试阶段或连接速度太慢,默认线程执行超时仅为1秒,因此,如果您在命令中放置断点,则可以轻松获得此消息

虽然这不是你的情况,但可能会帮助别人


推荐