首页 > 解决方案 > 使用 Node 使用 RabbitMQ - 限制并行处理

问题描述

我有一个 RabbitMQ 队列,它有时可能会保存大量要处理的数据。

据我了解,channel.consume即使它达到了 RAM 限制(最终崩溃), using 也会尝试将消息强制输入 Node 程序。

什么是确保工人只能处理他们能够处理的尽可能多的任务的最佳方法?

我正在考虑使用一串(转换)流与channel.get(它只收到一条消息)。如果第一个流的缓冲区已满,我们就停止获取消息。

标签: node.jsrabbitmqnodejs-stream

解决方案


我相信您想要的是指定消费者预取。这向 RabbitMQ 指示它应该一次“推送”多少条消息给消费者。

此处提供了一个示例

channel.prefetch(1);

将是提供的最低值,并应确保您的节点程序的内存消耗最少。

这是基于您的描述,如果我的理解是正确的,我还建议重命名您的问题(并行处理将更多地与单个队列上的多个消费者相关,而不是单个消费者获取所有消息)


推荐阅读