【问题标题】:Behaviour of rabbitmq flow-control when one client of many hangs当多个客户端中的一个客户端挂起时,rabbitmq 流控制的行为
【发布时间】:2014-02-23 12:46:58
【问题描述】:

我试图了解rabbitmq per-connection flow-control 如何与多个消费者一起工作。特别是如果一名消费者被绞死会发生什么?是否会调用流控制,它将如何影响其他消费者?该行为是否取决于队列是持久的还是自动删除的?

谢谢。

【问题讨论】:

  • 请描述“流控制”的含义,因为根据您的设置,它在 RabbitMQ 中可能有多种含义。
  • 我的意思是每个连接。我更改了问题并添加了指向相应 rabbitmq 文档页面的链接

标签: rabbitmq flow-control


【解决方案1】:

Rabbit MQ 使用“信用流控制”。

基本上,每当在频道上收到消息时,都会扣除信用。信用从默认水平开始,例如200,当它低于 0 时,连接被阻止。在消费和确认一定数量的消息后,信用会增加一定数量。

您可以在此处阅读更多信息:

http://videlalvaro.github.io/2013/09/rabbitmq-internals-credit-flow-for-erlang-processes.html

【讨论】:

    【解决方案2】:

    Per-connection flow control 描述了当发布者(或发布者组)向队列发送消息的速度快于队列的处理速度时会发生什么。这是一个安全特性,因为当队列无限制地填充时,RabbitMQ 会在某些时候变得不稳定。从文档来看,这是自动的:

    RabbitMQ 将阻止发布太快而队列无法跟上的连接。无需配置。

    不幸的是,除了“每秒几次”之外,文档并没有非常具体地说明何时/如何实施此流量控制。所以,如果一个消费者卡住了,只要其他消费者能跟上,就不应该触发流量控制。

    【讨论】:

    • 我不同意 - 我观察到交换散开到 5 个单独的队列。 4 个队列跟上了发布速度,但其中一个被积压了。在达到 4m 左右后,发布率会间歇性地减半 - 除了 RMQ 之外,没有其他错误提示任何其他内容。我只能把它归结为信用流。
    • @ReneWooller 您能否更准确地说明在这种情况下您不同意什么?在下面阅读您的答案,这听起来像是对我已经概述的内容的详细说明。有趣,但不一定是分歧。
    • 这个语句特别是“所以,如果一个消费者卡住了,只要其他消费者能跟上,就不应该触发流量控制。”如果一个消费者卡住了,并且它正在拉出的队列积压,它将触发流量控制。我刚刚意识到你可能是指一群消费者都从同一个队列中拉出来——如果这是你的意思,我不反对。
    • 嗯,这就是我所指的——问题在这方面不清楚,我应该要求澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2022-06-16
    • 2018-04-12
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多