我试图了解rabbitmq per-connection flow-control如何与多个消费者一起工作。特别是如果一名消费者被绞死会发生什么?是否会调用流控制,它将如何影响其他消费者?行为是否取决于队列是持久的还是自动删除的?
谢谢。
我试图了解rabbitmq per-connection flow-control如何与多个消费者一起工作。特别是如果一名消费者被绞死会发生什么?是否会调用流控制,它将如何影响其他消费者?行为是否取决于队列是持久的还是自动删除的?
谢谢。
Rabbit MQ 使用“信用流控制”。
本质上,每当在频道上收到消息时,都会扣除信用。信用从默认水平开始,例如 200,当它低于 0 时,连接被阻止。在消费和确认一定数量的消息后,信用会增加一定数量。
你可以在这里读更多关于它的内容:
http://videlalvaro.github.io/2013/09/rabbitmq-internals-credit-flow-for-erlang-processes.html
Per-connection flow control
描述当发布者(或发布者组)向队列发送消息的速度快于队列的处理速度时会发生什么。这是一个安全特性,因为当队列无限制地填充时,RabbitMQ 会在某些时候变得不稳定。从文档中,这是自动的:
RabbitMQ 将阻止发布太快而队列无法跟上的连接。无需配置。
不幸的是,除了“每秒几次”之外,文档并没有非常具体地说明何时/如何实现此流量控制。因此,如果一个消费者卡住了,只要其他消费者能跟上,就不应该触发流量控制。