Hystrix中的maxQueueSize和queueSizeRejectionThreshold如何工作

时间:2019-01-16 22:30:09

标签: spring hystrix

我尝试了解如何在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?

1 个答案:

答案 0 :(得分:0)

documentation中,它表示maximumQueueSize

  

...如果不重新初始化不支持的线程执行器,则无法调整大小或更改。

这意味着如果您想要固定的队列大小,则只需要在启动时设置maximumQueueSize,并且如果您想在运行时更改大小,则可以设置queueSizeRejectionThreshold

关于为什么您的应用程序没有被阻止;您确定发送的请求需要很长时间才能处理?换句话说,您正在排队吗?如果请求迅速返回响应,队列将不会被填充。