На JavaScript В RabbitMQ -> Вытащить Одного Сообщения


Я пытаюсь вытащить одного сообщения от в RabbitMQ, процесс его, и признаю, что одно сообщение. Я не хочу его продолжать после подтверждения извлечение сообщений из очереди. Если я не сделаю гл. закрыть() в коде ниже, он продолжает тянуть сообщения после подтверждения предыдущего сообщения.

Используя экземпляр докер в RabbitMQ я запускаю этот код (который работает), но мне любопытно, если открытия/закрытия каналов быстро лучший способ, чтобы сделать это:

amqp.connect('amqp://guest:guest@localhost', (err, conn) => {
 conn.createChannel((err, ch) => {
  if (err) {
   console.error(err);
  } else {
   let q = 'my queue';
   ch.prefetch(1);
   ch.consume(q, data => {
    console.log(data.content.toString());
    ch.ack(data);
    ch.close();
    returnData = data;
   });
  }
 });
});


702
-1
задан 15 февраля 2018 в 06:02 Источник Поделиться
Комментарии
1 ответ

От ответа на переполнение стека:

Вы можете извлекать сообщения одному за раз, используя канал.получим (см. http://www.squaremobius.net/amqp.node/channel_api.html#channel_get), я нахожу это может быть полезным, а не потреблять (даже с упреждением). Вы можете использовать долгое время жила канал для этой цели.

var amqpChannel = null;

amqp.connect('amqp://guest:guest@localhost', (err, conn) => {
conn.createChannel((err, ch) => {
if (err) {
console.error(err);
} else {
amqpChannel = ch;
}
});
});

var readMessageFromQueue = function() {
if (amqpChannel) {
amqpChannel.get(q, data => {
// data will be set to false if no messages are available on the queue.
if (data) {
console.log(data.content.toString());
amqpChannel.ack(data);
}
});
}

}

// Какой интервал вам нравится..
метод setInterval(readMessageFromQueue, 1000);

0
ответ дан 18 февраля 2018 в 02:02 Источник Поделиться