这是为了获得有关rabbitmq排队和节点js主/工作线程如何组合的更多知识。
答案 0 :(得分:2)
Node.js主工作线程与rabbitmq队列不同,因为rabbitmq提供了将任务存储到队列中的工具,以便当工作者空闲时,工作进程可以使用它们。将这两者结合起来会有非常具体的用例,通常不需要。
这两者的组合实施需要几件事,主要包括node-amqp client和cluster。 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发送消息,而是需要将成功消息放入队列。主服务器将监听该队列以接收确认和成功消息。