[rabbitmq-discuss] exchanges and message processing
Joe Williams
joe at joetify.com
Wed May 6 17:21:24 BST 2009
Thanks Matthias, that makes sense to me. Message order isn't an issue in
my case so I think it might work well.
-Joe
Matthias Radestock wrote:
> Joe,
>
> Joe Williams wrote:
>> This is in relation to a thread I started on the ruby-amqp list:
>>
>> http://groups.google.com/group/ruby-amqp/browse_thread/thread/6296567fa545ca8d?hl=en
>>
>>
>>
>> My question is regarding exchanges, queues and dealing with messages
>> that I would like to get processed only once. I am sending messages
>> containing json and would like to use a field from the json as the
>> routing key to alleviate needing to do numerous case statements in my
>> code. It seems that fanout and direct exchanges would not work since
>> they have possibility of having messages getting processed more than
>> once by different consumers. The responder on the ruby-amqp list
>> mentioned a shared queue that is in the 091 spec. But this seems to
>> put me back at using a long case statement.
>>
>> In an ideal situation I would have multiple consumers (written
>> without epic case statements) and messages that get consumed once and
>> only once.
>>
>> Any suggestions on how to go about doing something like this?
>
> The role of exchanges is to route messages to queues. They *all* have
> the possibility of resulting in messages getting routed to multiple
> queues and hence processed by multiple consumers - that's what they
> are there for. Whether that actually happens depends on the bindings
> that have been configured.
>
> For your use case, the following setup should work:
> - one direct exchange
> - one queue for each of the case branches
> - one binding per queue to the direct exchange, with the binding key
> set to the case branch discriminator
> - one consumer per queue, handling the messages for one particular
> branch discriminator
>
> In this setup messages will get routed to exactly one consumer, based
> on their routing key. You'd only get duplication if you set up
> additional queues and consumers that bound to the direct exchange with
> the same binding keys.
>
> One possible downside of this setup compared to a single queue is that
> message order is not preserved across queues.
>
>
> Regards,
>
> Matthias.
--
Name: Joseph A. Williams
Email: joe at joetify.com
Blog: http://www.joeandmotorboat.com/
More information about the rabbitmq-discuss
mailing list