Команда Hystrix не работает с "тайм-аутом и отсутствием резервной копии",

Я заметил, что некоторые команды в моем приложении не работают с

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 как TIMEOUT и выполняет резервную логику.

Таким образом, вы можете увеличить значение таймаута или отключить тайм-аут по умолчанию (если применимо в вашем случае) для вашей команды, используя свойство:

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

Вы можете найти более подробную информацию здесь: https://github.com/Netflix/Hystrix/wiki/Configuration#CommandExecution

Ответ 2

Возможно, вы находитесь в отладке или слишком медленном соединении, время выполнения выполнения по умолчанию - только 1 секунда, поэтому вы можете легко получить это сообщение, если вы положите точку останова в своей команде, скажем

Хотя это не ваш случай, но может помочь кому-то еще

Ответ 3

Глядя на stacktrace, это исключение, вызванное Hystrix после 210 секунд, которые вы указали выше.

As TimeoutException - это проверенное исключение, которое должно быть объявлено для каждого метода, который мог бы выдать это исключение. Вы увидите, что это указано в методе run() вашего кода.

Вы можете отлаживать это как любую другую программу, но помните, что метод run() работает в потоке, отдельно от вызывающего. Через 210 секунд вызывающий абонент будет продолжать работать, несмотря на сеанс отладки.

Ответ 4

Вы должны увеличить URL-адрес клиента client client client client client