使用 Node 的 RabbitMQ - 限制并行处理

Consuming RabbitMQ with Node - limit parallel processing

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

据我了解,使用 channel.consume 会尝试将消息强制发送到 Node 程序中,即使它已达到其 RAM 限制(并最终崩溃)。

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

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

我相信你想要的是指定consumer prefetch。 这向 RabbitMQ 指示它应该 "push" 一次向消费者发送多少消息。

提供了示例here

channel.prefetch(1);

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

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