节点js工作线程和rabbitmq消费者是否相同?

时间:2017-06-15 12:01:10

标签: node.js rabbitmq

这是为了获得有关rabbitmq排队和节点js主/工作线程如何组合的更多知识。

1 个答案:

答案 0 :(得分:2)

Node.js主工作线程与rabbitmq队列不同,因为rabbitmq提供了将任务存储到队列中的工具,以便当工作者空闲时,工作进程可以使用它们。将这两者结合起来会有非常具体的用例,通常不需要。

这两者的组合实施需要几件事,主要包括node-amqp clientcluster。 Cluster是节点的默认功能,它为主工作线程提供api。如果没有rabbitmq,您通常会使用一个主进程分发任务,即将任务发送到所有工作进程,工作线程侦听接收任务。

现在,既然你想使用rabbitmq,你必须首先subscribe到交换机来监听所有任务,当你收到任务时,你将它传递给你的工作进程。下面是一个小片段,提供解释的要点。

connection.on('ready', function() {
    connection.exchange('exchange-name', function(exchange) {
        _exchange = exchange;

        connection.queue('queue-name', function(queue) {
            _queue = queue;

            // Bind to the exchange
            queue.bind('exchange-name', 'routing-key');

            // Subscribe to the queue
            queue
                .subscribe(function(message) {
                    // When receiving the message call the worker thread to complete the task
                    console.log('Got message', message);
                    queue.shift(false, false);
                })
                .addCallback(function(res) {
                    // Hold on to the consumer tag so we can unsubscribe later
                    _consumerTag = res.consumerTag;
                })
            ;
        });
    });
});

master和worker之间的消息交换:不是直接向master worker发送消息,而是需要将成功消息放入队列。主服务器将监听该队列以接收确认和成功消息。