Как maxQueueSize и queueSizeRejectionThreshold работает в Hystrix - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь понять, как использовать maxQueueSize внутри Hystrix. Согласно моей интерпретации, если сервер не может обслуживать запрос, тогда клиенты будут хранить поток в очереди до тех пор, пока очередь не заполнится, а затем он выдаст исключение. И это поведение не зависит от execute.isolation.thread.timeoutInMilliseconds.

Для демонстрации я написал два простых приложения. «A» - это клиент, который называет «B». В «B» я установил точку останова и вызвал ее из метода «A», аннотированного @ HystrixCommand.

@HystrixCommand(fallbackMethod = "fallback", commandProperties = {
        @HystrixProperty(name = 
"execution.isolation.thread.timeoutInMilliseconds", value = "20000"),
}, threadPoolProperties = {
        @HystrixProperty(name = "coreSize", value = "1"),
        @HystrixProperty(name = "maxQueueSize", value = "2"),
        @HystrixProperty(name = "queueSizeRejectionThreshold", value = "2")
},)

Я отправил 6 запросов, но ни один из них не был отклонен, хотя пороговое значение было установлено на 2. Конечно, каждый поток останавливался через 20000 мс, как было определено. Как должны работать maxQueueSize и queueSizeRejectionThreshold?

1 Ответ

0 голосов
/ 17 июня 2019

В документации написано, что максимум QueueSize

... невозможно изменить размер или изменить без повторной инициализации исполнителя потока, который не поддерживается.

Это означает, что если вам нужен фиксированный размер очереди, вам нужно только установить MaximumQueueSize при запуске, а если вы хотите изменить размер во время выполнения, вы можете установить queueSizeRejectionThreshold

Что касается того, почему ничего не было заблокировано в вашем приложении; Вы уверены, что отправленные вами запросы занимают много времени? Другими словами, вы заполняете очередь? Если запрос быстро возвращает ответ, очередь не будет заполнена.

...