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

Ben Hood 0x6e6562 at gmail.com
Wed Jul 30 15:31:45 BST 2008


Dave,

On Wed, Jul 30, 2008 at 3:10 PM,  <David.Corcoran at edftrading.com> wrote:
>
>> I use the java library and it looks like ChannelN.java could do a
> basicNak
>> in the same way it does a basicAck. I'm going to test this later. Perhaps
>> it's the same with the python library.
>
> Basic.Reject looks absolutely perfect for negative acks. However my test
> code produced this:
> Main thread caught exception: com.rabbitmq.client.ShutdownSignalException
> (connection error; reason:
> {#method<connection.close>(reply-code=503,reply-text=COMMAND_INVALID -
> unimplemented method,class-id=60,method-id=90),null,""})

The spec says that for messages thus rejected "The server MUST NOT
deliver the message to the same client within the context of the
current channel.". This requires queues to track which channels have
rejected a particular message. Clearly that can be done, but it's more
than a few minutes work and so far we have not had anybody complaining
about the absence of basic.reject.

IIRC you are the first :-(

There are a couple of options that we have:

1. Obviously implement this feature;
2. Implement message delivery credit window management, which would be
to solution to the root cause

What the timelines are for either of case I cannot say at the moment,
we will need to consider other plans and what is coming up in 0-9 SP1.

So we'll have to get back to you on that.

BTW, In general, you can see what parts of the spec have been
implemented in this table:
http://www.rabbitmq.com/compatibility.html#classes

HTH,

Ben




More information about the rabbitmq-discuss mailing list