我目前正在构建一个 NodeJS 系统,该系统负责接收大量事件,并且处理这些事件的顺序非常关键。应用程序可扩展并能够处理 Rabbit 消费者崩溃也很重要,因此我有多个消费者读取绑定(bind)到直接交换的队列,“noAck”设置为 false,并且每个队列的预取计数为 1。
这确保了我的消息按顺序处理,但是两个消费者同时处理事件,我期望的结果是:
Consumer A Consumer B
---------- -----------
process event 1
...
acknowledge
process event 2
...
acknowledge
process event 3
...
..and so on.
我意识到这会降低 Node 的效率,但保证事件按顺序完全处理对我来说更为重要。
任何帮助将不胜感激。
最佳答案
This is ensuring that my messages are being processed
不会,只要您有并发消费者,设置 basic_qos=1
就不会阻止其他消费者无序处理消息。
如果您需要有序处理,则每个队列必须有 1 个消费者。如果您想要并行性,最好的办法就是使用一致性哈希交换之类的工具将消息流划分为多个队列。当然,消息在分区时会丢失顺序,但是每个队列的一个消费者将确保每个队列上的有序处理。
关于node.js - 如何在没有并发的情况下拥有多个循环 RabbmitMQ 消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32396109/