2

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

谢谢。

4

2 回答 2

2

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

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

你可以在这里读更多关于它的内容:

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

于 2015-02-23T22:57:37.733 回答
1

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

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

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

于 2014-02-01T14:45:22.737 回答