Я пытаюсь понять, как использовать maxQueueSize внутри Hystrix. Согласно моей интерпретации, если сервер не может обслуживать запрос, клиенты будут хранить поток в очереди до тех пор, пока очередь не будет заполнена, а затем он вызовет исключение. И это поведение не зависит от execute.isolation.thread.timeoutInMilliseconds.
Чтобы продемонстрировать это, я написал два простых приложения. «А» - это клиент, который звонит «Б». В «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?
Да, есть, но не понял.
В документация говорится, что максимальное значение QueueSize
... cannot be resized or changed without re-initializing the thread executor which is not supported.
Это означает, что если вам нужен фиксированный размер очереди, вам нужно только установить maximumQueueSize при запуске, и если вы хотите изменить размер во время выполнения, вы можете установить queueSizeRejectionThreshold
Что касается того, почему в вашем приложении ничего не заблокировали; Вы уверены, что отправленные вами запросы обрабатываются долго? Другими словами, вы заполняете очередь? Если запрос возвращает ответ быстро, очередь не заполняется.
Вы думали о чтении документация?