node.js - 如何在没有并发的情况下拥有多个循环 RabbmitMQ 消费者

标签 node.js rabbitmq

我目前正在构建一个 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/

相关文章:

rabbitmq - 使用 RabbitMQ 停止 MassTransit 中的特定使用者

node.js - 使用 puppeteer 进行负载测试

Node.js 下载管理器

javascript - Node - Post 请求显示未定义

javascript - 如何在 Nest App 中使用 RabbitMQ 和 REST-API?

python-2.7 - 使用 pika connection.close() 给出 "WARNING:pika.adapters.base_connection:Unknown state on disconnect: 0"

python - 我们可以用python在rabbitmq中创建队列吗

node.js - 带有外部文件的 express 4 路由器

javascript - 使用 mongoose 从架构中的嵌套数组中删除项目

python - Redis 在与 Celery 组或链一起使用时失去连接 - 抛出错误/MainProcess] 与 Redis 的连接丢失 : Retry (0/20) now