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
});
Другие вопросы по тегам