[rabbitmq-discuss] New exchange type

Martin Sustrik sustrik at imatix.com
Tue Apr 22 08:05:05 BST 2008

>> Recently I put together a new exchange type for RabbitMQ, because none of
>> the existing ones completely match our requirements. The problem it solves
>> is this: we want a publish-subscribe model where exactly one subscriber
>> receives any given message. If we set up a topic exchange and have all
>> subscribers listen on the same queue, we get this out of the box. But this
>> requires that all messages go to that one queue, which resides on one
>> machine, causing a pretty significant bottleneck. A reasonable way around
>> this was to implement a new exchange type ("anycast") that picks a random
>> queue when a message is routed. The diff and new file for
>> rabbit_exchange.erl are attached.
I've seen this requirement before, however, AFAICS it breaks AMQP model. 
The exchanges are meant to be used for message distribution, i.e. the 
message should be delivered to *all* queues with appropriate binding to 
the exchange. Queues are intended to do the load-balancing. Not adhering 
to this model causes problems with some more sophisticated use cases 
(wire-tapping, federation). It also introduces a lot of unfairness to 
the load-balancing algorithm. Why do you believe a single queue would 
create a significantly graver bottleneck when compared to a single exchange?


More information about the rabbitmq-discuss mailing list