[rabbitmq-discuss] Headers Exchange

David Wragg david at rabbitmq.com
Thu Jan 27 11:55:42 GMT 2011

"Jason J. W. Williams" <jasonjwwilliams at gmail.com> writes:
> Is the headers exchange still supported?


> Seems to be from the RabbitMQ
> AMQP compatibility chart but it's hard to find any concrete
> information on using it. What is the advantage if any over topic?

Short and fairly useless answer: Headers exchanges route based on the
headers of the message.  Topic exchanges route based on the routing key
usd to publish the mesage.

Longer answer:

- Headers exchanges can express an "any field matches" or an "all fields
  match" condition.  Topic exchanges can only express an "all words
  match" (e.g. a binding key of "*.x.*.y.*" will only match routing keys
  where the second word is "x" and the fourth word is "y"; OTOH multiple
  bindings provide a way to express disjunctions - you could bind a
  queue twice to a topic exchange, once with binding key "*.x.*.*.*" and
  once with "*.*.*.y.*").

- Topic exchanges can do hierarchical matching via the "#" operator
  (e.g. a binding key of "a.b.#" matches any routing keys beginning with

The headers exchange is quite limited in terms of the queries it can
express: It can only do equality and presence matching on fields.  It
can only express an "and" and "or" combination over a set of field
conditions, not more elaborate boolean expressions (and no negation).
So while the header exchang might appear to offer a lot, in practice its
uses are restricted to a fairly small niche.  A more general variant
would be a lot more interesting.


David Wragg
Staff Engineer, RabbitMQ
SpringSource, a division of VMware

More information about the rabbitmq-discuss mailing list