node-amqp: возникают проблемы с двумя потребителями, подписывающимися на одну и ту же очередь по одному

У меня есть два потребителя, которым нужно обрабатывать сообщения из одной очереди, но только одного из них в любое время. Последовательность того, что я пытаюсь выполнить, выглядит следующим образом:

  1. (начало) Ни один из потребителей не подписался на очередь
  2. Consumer1 подписывается на очередь
  3. Производитель отправляет сообщение в очередь, сообщения доставляются потребителю1
  4. Consumer1 обрабатывает сообщения и через некоторое время отписывается
  5. Producer отправляет больше сообщений в очередь, сообщения сохраняются в очереди (autoDelete=false, поэтому очередь не уничтожается, когда подписчик не подписан)
  6. Consumer2 подписывается на очередь, обрабатывает сохраненные сообщения и через некоторое время отписывается.
  7. Consumer1 подписывается, обрабатывает сообщения... .. и так далее

Это работает как ожидалось изначально. После шага № 5, описанного выше, я вижу, что дальнейшие сообщения от производителя доставляются обоим потребителям, поочередно каждому из них, даже если только одно подписалось, а другое отписалось.

Код, который я использую, чтобы заставить это работать, похож на это:

1. Code for consumer subscribes to queue 
connection = amqp.createConnection( { url: "http://guest@localhost:5672" }
connection.on('ready', function() {
connection.queue(queuename, {autoDelete: false}, function(queue) {
      queue.bind('myexchange', '1');
      queue.subscribe(mycallback).addCallback(function(ok) { qtag = ok.consumerTag; }
}


2. code for consumer unsubcribe
queue.unsubscribe(qtag);
queue.on('basicCancelOk', function() {
}

Что-то не так с этим кодом или с общим подходом к достижению желаемой последовательности, как я описал ранее?

0 ответов

Другие вопросы по тегам