openjdk:10.0.1-jre-slim
我有一个名为serviceA
且相关联的
serviceA.ribbon.ConnectTimeout=5000
serviceA.ribbon.ReadTimeout=15000
hystrix.command.serviceA.execution.isolation.thread.timeoutInMilliseconds = 20000
我没有(明知)在类路径上进行弹簧重试。我执行./mvnw dependency:list | grep -i retry
并且没有结果。
在运行时,我收到以下警告:
命令serviceA的Hystrix超时20000ms设置低于功能区读取和连接超时40000ms的组合。
我不确定这些数字来自哪里,因为我认为我将它们分别设置为15秒和5秒。为什么这个数字加倍?
答案 0 :(得分:7)
实际上,功能区超时包括所有相同的服务器重试和下次服务器重试。
ribbonTimeout = (ribbon.ConnectTimeout + ribbon.ReadTimeout) * (ribbon.MaxAutoRetries + 1) * (ribbon.MaxAutoRetriesNextServer + 1);
// ...
if(hystrixTimeout < ribbonTimeout) {
LOGGER.warn("The Hystrix timeout of " + hystrixTimeout + "ms for the command " + commandKey +
" is set lower than the combination of the Ribbon read and connect timeout, " + ribbonTimeout + "ms.");
}
在您的配置中:
所以hystrixTimeout应该是:
(5000 + 15000) * (1 + 0) * (1 + 1) // -> 40000 ms
如果您选择不配置Hystrix超时,则默认的Hystrix超时将为40000ms。