var amqp=require('amqp');
var conn=amqp.createConnection({/**/});
conn.on('ready',function() {
console.log('Server Connected');
conn.exchange('order',options={type:'topic'},function(exchange) {
console.log('Exchange connected');
conn.queue('order-consumer',function(queue) {
queue.bind(exchange,'');
console.log('Queue Connected');
queue.subscribe({ack:true},function(msg) {
//conn.end();
console.log(msg);
});
});
});
});
请注意,conn.end()
已被注释掉。经过大量的研究,我仍然不知道为什么需要这里。虽然它很神奇,但连接每次都会结束,并且必须在每条消息后再次连接到服务器。
这是AMQP的设计方式吗?或者这是node-amqp实现的问题吗?
答案 0 :(得分:1)
正如fine manual所述:
将options参数设置为
{ ack: true }
(默认为false
)将使AMQP服务器一次只传递一条消息。如果您需要下一条消息,请致电q.shift()
。
您没有致电queue.shift()
:
queue.subscribe({ ack : true }, function(msg) {
console.log(msg);
queue.shift(); // <-- necessary
});