我尝试了解如何在Hystrix中使用maxQueueSize。根据我的解释,如果服务器无法处理请求,则客户端会将线程存储在队列中,直到队列已满,然后引发异常。而且此行为独立于execution.isolation.thread.timeoutInMilliseconds。
为了证明这一点,我编写了两个简单的应用程序。 “ A”是称为“ B”的客户端。在“ B”中,我设置了一个断点,并使用@HystrixCommand注释的方法“ A”对其进行了调用。
@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 ms之后停止。应该如何工作maxQueueSize和queueSizeRejectionThreshold?
答案 0 :(得分:0)
在documentation中,它表示maximumQueueSize
...如果不重新初始化不支持的线程执行器,则无法调整大小或更改。
这意味着如果您想要固定的队列大小,则只需要在启动时设置maximumQueueSize,并且如果您想在运行时更改大小,则可以设置queueSizeRejectionThreshold
关于为什么您的应用程序没有被阻止;您确定发送的请求需要很长时间才能处理?换句话说,您正在排队吗?如果请求迅速返回响应,队列将不会被填充。