node-amqp:两个消费者一次订阅同一个队列时遇到问题

时间:2014-11-14 16:55:57

标签: node-amqp

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

  1. (开始)没有消费者订阅了队列
  2. Consumer1订阅队列
  3. 生产者向队列发送消息,消息传递给consumer1
  4. Consumer1处理消息,然后在一段时间后取消订阅
  5. 生产者向队列发送更多消息,消息存储在队列中(autoDelete = false,因此当没有消费者订阅时队列不会被销毁)
  6. Consumer2订阅队列,处理存储的消息并在一段时间后取消订阅。
  7. Consumer1订阅,处理消息...... ..所以
  8. 这最初是按预期工作的。在上面的步骤#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 个答案:

没有答案