node-amqp: возникают проблемы с двумя потребителями, подписывающимися на одну и ту же очередь по одному
У меня есть два потребителя, которым нужно обрабатывать сообщения из одной очереди, но только одного из них в любое время. Последовательность того, что я пытаюсь выполнить, выглядит следующим образом:
- (начало) Ни один из потребителей не подписался на очередь
- 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() {
}
Что-то не так с этим кодом или с общим подходом к достижению желаемой последовательности, как я описал ранее?