如何在没有并发的情况下进行多轮循环RabbmitMQ消费者

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

这确保了我的消息正在被处理,但两个消费者都在同时处理事件,我希望的结果是:

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

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

任何帮助将不胜感激。

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

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

如果您需要有序处理,则每个队列必须有一个消费者。 如果你想要并行性,你可以做的最好的事情就是将消息stream划分成几个队列,使用Consistent Hash Exchange等 。 当然,消息在分区时会失序,但是每个队列中的一个消费者将确保每个队列上的有序处理。