1

我有两个消费者需要处理来自同一个队列的消息,但在任何时候都只有一个。我想要完成的一系列事情是这样的:

  1. (start) 没有消费者订阅队列
  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() {
}

如前所述,此代码或实现所需序列的整体方法有什么问题吗?

4

0 回答 0