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

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

  1. (начало) Ни один из потребителей не подписался на очередь
  2. Consumer1 подписывается на очередь
  3. Производитель отправляет сообщение в очередь, сообщения доставляются потребителю1
  4. Consumer1 обрабатывает сообщения, а затем через некоторое время отказывается от подписки
  5. Производитель отправляет больше сообщений в очередь, сообщения сохраняются в очереди (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() {
}

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


person rkr393    schedule 14.11.2014    source источник
comment
Возможно, следующая ссылка поможет stackoverflow.com/questions/10620976/   -  person HILARUDEEN S ALLAUDEEN    schedule 30.10.2015