Hystrix报错排查
Posted 江湖小民
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hystrix报错排查相关的知识,希望对你有一定的参考价值。
The Hystrix timeout of 20000ms for the command uaa-service is
set lower than the combination of the Ribbon
read and connect timeout, 40000ms.
一、分析
Ribbon 总超时时间计算公式如下:
#当前项目的配置计算。而不是与别的模块参数计算比对。
ribbonTimeout =
(RibbonReadTimeout + RibbonConnectTimeout)
* (MaxAutoRetries + 1)
* (MaxAutoRetriesNextServer + 1)
其中,MaxAutoRetries 默认为0,MaxAutoRetriesNextServer 默认为1。
而 Hystrix 超时时间为 20000 < 40000,从逻辑上来讲,hystrixTimeout 要大于 ribbonTimeout,否则 hystrix 熔断了以后,ribbon 的重试就都没有意义了。
二、解决
配置hystrix的超时时间不小于40000,以及调低 ribbon 的 timeOut 或者重试次数。
(1)修改hystrix配置
hystrix:
command:
default:
execution:
isolation:
thread:
#配置hystrix的超时时间,
#要大于(RibbonReadTimeout + RibbonConnectTimeout) * (MaxAutoRetries + 1) * (MaxAutoRetriesNextServer + 1)
timeoutInMilliseconds: 40000
(2)修改ribbon配置
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
# MaxAutoRetries: 1
# MaxAutoRetriesNextServer: 1
三、总结
之前有看到过很多小伙伴去修改这个Hystrix超时的这个值,导致Hystrix超时时间配置很大,这样的配置是没有意义的,达不到熔断降级的作用。
ribbon:
ReadTimeout: 10000
ConnectTimeout: 10000
# MaxAutoRetries: 1
# MaxAutoRetriesNextServer: 1
hystrix:
command:
default:
execution:
isolation:
strategy: SEMAPHORE
thread:
#配置hystrix的超时时间,
#要大于(RibbonReadTimeout + RibbonConnectTimeout) * (MaxAutoRetries + 1) * (MaxAutoRetriesNextServer + 1)
timeoutInMilliseconds: 40000
以上是关于Hystrix报错排查的主要内容,如果未能解决你的问题,请参考以下文章
错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段