我目前正致力于组建一个负责接收大量事件的NodeJS系统,并且正在处理的事件的顺序非常关键。同样重要的是应用程序可以扩展并且可以处理掉落的Rabbit消费者,因此我有多个消费者读取队列,该队列被绑定到直接交换,其中'noAck'设置为false并且每个队列具有预取计数1。
这确保我的消息按顺序处理,但是两个消费者同时处理事件,我期望的结果是:
Consumer A Consumer B
---------- -----------
process event 1
...
acknowledge
process event 2
...
acknowledge
process event 3
...
..and so on.
我意识到这会降低节点的效率,但保证事件按顺序完全处理对我来说更为重要。
非常感谢任何帮助。
答案 0 :(得分:1)
这是为了确保我的邮件正在处理
不,只要您有并发消费者,设置basic_qos=1
就不会阻止其他消费者无序处理消息。
如果您需要订购处理,则每个队列必须有1个消费者。如果您想要并行性,那么您可以做的最好的事情是使用 Consistent Hash Exchange 之类的内容将消息流分区为多个队列。当然,消息将在分区时失去顺序,但每个队列中的一个消费者将确保每个队列上的有序处理。