openjdk:10.0.1-jre-slim
を使用したDocker内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秒に設定したいと思っていたので、これらの数値がどこから来たのかわかりません。この数字が2倍になるのはなぜですか?
実際、リボンタイムアウトには、すべて同じサーバーの再試行と次のサーバーの再試行が含まれます。
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になります。