【问题标题】:How maxQueueSize and queueSizeRejectionThreshold works in the Hystrix在 Hystrix 中 maxQueueSize 和 queueSizeRejectionThreshold 是如何工作的
【发布时间】:2019-06-11 02:09:06
【问题描述】:

我尝试了解如何在 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 毫秒后停止。 maxQueueSize 和 queueSizeRejectionThreshold 应该如何工作?

【问题讨论】:

标签: spring hystrix


【解决方案1】:

documentation 中表示最大队列大小

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

这意味着如果你想要一个固定的队列大小,那么你只需要在启动时设置 maximumQueueSize,如果你想在运行时更改大小,那么你可以设置queueSizeRejectionThreshold

至于为什么您的应用程序中没有任何内容被阻止;您确定您发送的请求需要很长时间来处理吗?换句话说,您是否正在填满队列?如果请求快速返回响应,则队列不会被填满。

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2020-09-07
    • 2017-02-05
    • 2018-01-09
    • 2018-07-21
    • 2020-03-14
    • 2020-05-16
    • 2023-03-12
    • 2018-10-05
    相关资源
    最近更新 更多