[rabbitmq-discuss] Load balancing with multiple consumers on a single queue

Gordon Sim gsim at redhat.com
Thu Jul 31 09:32:48 BST 2008

Gordon Sim wrote:
> David.Corcoran at edftrading.com wrote:
>> rabbitmq-discuss-bounces at lists.rabbitmq.com wrote on 30/07/2008 18:02:30:
>> Hey Matthias,
>>> Wouldn't a simple solution be to have all consumers consuming off a
>>> single queue using basic.get? I.e. consumer gets job with basic.get,
>>> does work, sends ack, gets next job with basic.get, etc.
>> Not really because a lot of our jobs are only a few ms so the rtt would
>> play too much part if we did it this way. The idea of having a local queue
>> full of messages works great for us, as long as there's a way to reject
>> messages if someone else's queue is empty.
> Could you use basic.recover(requeue=true) in that case? You could ack 
> the first n messages on your local queue that you want to deal with, 
> then issue the recover to have any subsequently delievered messages 
> requeued.

Sorry, didn't think this one through enough! Of course you can't ack 
before you process the tasks in case the client dies before actually 
doing the work and the messages are lost.

So for this to be of any use you would have to finish processing your 
current task, ack that then requeue everything everything else. That may 
be less attractive an option if it happens often as it removes the value 
of the prefetch.

> Of course when requeued those messages will be allocated to available 
> consumers, so some may come back to the same subscriber (that would also 
> be the case if you ack and sent them back to the same queue yourself).
> To avoid that (without having some form of flow control or prefetch 
> limit) you would I think need to temporarily cancel your subscription 
> and re-subscribe when you have processed the n messages (or a portion 
> thereof) from your local queue.
> _______________________________________________
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss

More information about the rabbitmq-discuss mailing list