Предупреждения о тайм-ауте Hystrix и ленты

Среда

  • Spring Boot 1.5.13.RELEASE
  • Весеннее облако Edgware.SR3
  • Скомпилирован с использованием версии Java "1.8.0_172-ea", среды выполнения Java (TM) SE (сборка 1.8.0_172-ea-b03) и уровня исходного кода 1.8.
  • Среда выполнения JRE: в докере с 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 и не получаю результатов.

Во время выполнения я получаю следующие предупреждения:

Тайм-аут Hystrix, равный 20000 мс, для команды serviceA установлен ниже, чем комбинация тайм-аута чтения ленты и подключения, равного 40000 мс.

Я не уверен, откуда взялись эти числа, учитывая, что я думал, что установлю их на 15 и 5 секунд соответственно. Почему эта цифра вдвое больше?




Ответы (1)


Фактически, тайм-аут ленты включает все попытки одного и того же сервера и повторные попытки следующего сервера.

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.");
    }

В вашей конфигурации:

  • tape.connectionTimeout - 5000.
  • tape.readTimeout - 15000.
  • tape.maxAutoRetries - 0 (по умолчанию)
  • tape.maxAutoRetriesNextServer - 1 (по умолчанию)

Итак, hystrixTimeout должен быть:

(5000 + 15000) * (1 + 0) * (1 + 1) // -> 40000 ms

Если вы решите не настраивать тайм-аут Hystrix, тайм-аут Hystrix по умолчанию будет равен 40000 мс.

19.13 Zuul Timeout in Spring Cloud Document

person bootsoon    schedule 05.06.2018