【问题标题】:Multiple node.js message receivers for a redis queueredis 队列的多个 node.js 消息接收器
【发布时间】:2016-03-29 02:04:47
【问题描述】:

尝试使用 rsmq-worker (https://github.com/mpneuried/rsmq-worker) 在 node.js 应用程序中实现队列处理器。必须运行多个工作人员来并行处理消息。

我们如何设置多个工人?

探索使用-https://github.com/Automattic/kue#parallel-processing-with-cluster

【问题讨论】:

  • @nvartolomei,我知道运行多个节点进程是最终的并行选项。但是,我认为每个节点进程运行多个 rsmq-worker 实例在性能方面也将是有益的,因为消息处理可能涉及大量 I/O。有意义吗?

标签: node.js redis message-queue


【解决方案1】:

只需创建多个指向同一个队列的 RSMQWorker 实例。

例子:

var workers = [];
for (let i = 0; i < NUMBER_OF_WORKERS; i++) {
        workers[i] = createWorker(i);
}

function createWorker(i) {
    const worker = new RSMQWorker(QUEUE_NAME, {...});
    worker.on("message", processMessage)
    return worker;
}

然后您可以使用 rsmq-worker 的自动启动选项或手动启动它们:

for (let i = 0; i < workers.length; i++) {
    workers[i].start();
}

通过这种方法,您将使用一个 Node.js 实例并行处理多条消息。如果您的消息处理逻辑涉及一些 I/O,它会提高性能。

如其他答案所述,您可以在多个 Node.js 实例中运行上述代码,以提高并行度。

【讨论】:

  • 建议从 1 GB 内存开始的工作人员数量是多少?
【解决方案2】:

您只需启动多个工作进程,它们就会开始并行处理消息。 RSMQ 声明它保证消息只会被传递一次,因此只有一个工作人员会处理一条消息。

查看 RSMQ 自述文件https://github.com/smrchy/rsmq。注意:

保证将消息准确地传递给一个收件人 消息可见性超时。

请看一下 createQueue 和 receiveMessage 方法 下面描述了可选参数,如可见性超时和 延迟。

【讨论】:

  • 感谢 nvartolomei。 '启动多个工作进程' - 你的意思是运行多个 node.js 进程?
  • 对,多节点进程。
  • 你也可以使用它,在后台它会启动多个节点进程,唯一的区别是你可以使用进程间通信,但这仅适用于tcp连接,即http服务器。但你不需要这些。
猜你喜欢
  • 1970-01-01
  • 2013-02-07
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2010-09-19
  • 2012-11-16
相关资源
最近更新 更多