nodejs amqp может получить сообщение только один раз
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?
1 ответ
Как говорится в прекрасном руководстве:
Установка аргумента параметров в
{ ack: true }
(который по умолчаниюfalse
) сделает так, чтобы сервер AMQP одновременно доставлял только одно сообщение. Когда вы хотите следующее сообщение, позвонитеq.shift()
,
Ты не звонишь queue.shift()
:
queue.subscribe({ ack : true }, function(msg) {
console.log(msg);
queue.shift(); // <-- necessary
});