我有两个消费者需要处理来自同一个队列的消息,但在任何时候都只有一个。我想要完成的一系列事情是这样的:
- (start) 没有消费者订阅队列
- Consumer1 订阅队列
- 生产者向队列发送消息,消息被传递到消费者1
- Consumer1 处理消息,然后在一段时间后取消订阅
- Producer向队列发送更多消息,消息存储在队列中(autoDelete=false,所以没有消费者订阅时队列不会被销毁)
- Consumer2 订阅队列,处理存储的消息并在一段时间后取消订阅。
- 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() {
}
如前所述,此代码或实现所需序列的整体方法有什么问题吗?