如何让多个循环RabbmitMQ消费者没有并发

时间:2015-09-04 10:43:20

标签: node.js rabbitmq

我目前正致力于组建一个负责接收大量事件的NodeJS系统,并且正在处理的事件的顺序非常关键。同样重要的是应用程序可以扩展并且可以处理掉落的Rabbit消费者,因此我有多个消费者读取队列,该队列被绑定到直接交换,其中'noAck'设置为false并且每个队列具有预取计数1。

这确保我的消息按顺序处理,但是两个消费者同时处理事件,我期望的结果是:

Consumer A          Consumer B
----------          -----------
process event 1
...
acknowledge
                    process event 2
                    ... 
                    acknowledge
process event 3
...
..and so on.

我意识到这会降低节点的效率,但保证事件按顺序完全处理对我来说更为重要。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

这是为了确保我的邮件正在处理

不,只要您有并发消费者,设置basic_qos=1就不会阻止其他消费者无序处理消息。

如果您需要订购处理,则每个队列必须有1个消费者。如果您想要并行性,那么您可以做的最好的事情是使用 Consistent Hash Exchange 之类的内容将消息流分区为多个队列。当然,消息将在分区时失去顺序,但每个队列中的一个消费者将确保每个队列上的有序处理。