RabbitMQ and AMQP 0-9-1

Since the beginning, RabbitMQ has implemented the 0-8 version of the AMQP specification. This was the first publicly-available version, but there's been plenty of development since then. In particular, we've wanted to support the 0-9-1 version of AMQP for a while now.

For around the last year we've maintained a 0-9-1-supporting branch of the broker and clients in Mercurial, and interested users have been running that version as it matures. Well, it's finally mature and we're now merging the 0-9-1 support into the default branch. This means it'll be in the next release.

At this point, you're probably wondering what the differences are between 0-8 and 0-9-1. Well, the good news is that the differences are not huge, and are entirely sensible. 0-9-1 mostly cleans up the 0-8 spec, explaining more clearly how the broker and clients are expected to behave in certain edge cases, and removing a whole load of ambiguity and half (or less) thought out features from 0-8.

In fact, if you're running 1.8.0 or later, you're already running a broker with most of the semantic changes from 0-9-1. But the wire protocol has changed a bit too, so it matters whether you're speaking 0-9-1 or 0-8.

For the Java and Erlang clients, we're intending to simply switch to supporting AMQP 0-9-1 exclusively in the next release. The .NET library already supports multiple protocols, so we're adding 0-9-1 as another option (and making it the default). For the broker we're going to support both AMQP 0-9-1 and AMQP 0-8. For any other client libraries we encourage you to speak to the library developer ;)

This means that this time it's safe to upgrade just your broker, or your broker and all your clients, but it's not safe to upgrade your clients without upgrading your broker!

Thank you for your attention.

Tags: , , ,

6 Responses to “RabbitMQ and AMQP 0-9-1”

  1. Twitter Trackbacks for RabbitMQ » Blog Archive » RabbitMQ and AMQP 0-9-1 - Messaging that just works [] on Says:

    [...] RabbitMQ » Blog Archive » RabbitMQ and AMQP 0-9-1 - Messaging that just works – view page – cached RabbitMQ is a complete and highly reliable enterprise messaging system based on the emerging AMQP standard Tweets about this link [...]

  2. William Garrison Says:

    Perhaps this is a stupid question but why is AMQP not backwards compatible like any other modern protocol? Surely this is easy to do with optional headers and feature negotiation. This is how websockets works.

  3. Simon MacMullen Says:

    AMQP is backwards compatible in the sense that client and server negotiate a version of the protocol to use. The situation is not hugely different from HTTP in that regard.

  4. RabbitMQ » Blog Archive » Growing Up - Messaging that just works Says:

    [...] Native support for multi-protocol messaging delivering better interoperability and more [...]

  5. Derek P. Moore Says:

    Please make the Java Client backwards compatible to 0-8. The Java Client internals have support for multiple protocols, it's only a matter of using them and/or exposing them through the ConnectionFactory.


  6. Kshitiz Says:


    With RabbitMQ, I have to achieve is a faster consumption of each message. The scenario is like this:

    I have to send emails/SMSes to different people after consuming the messages internally. I want to just post a message and consume it faster by having multiple consumers ready. The message should be consumed only by one consumer…

    Should I make a no. of consumers using a shared rabbitmq queue in which each consumer consumes the message posted on the exchange, deletes it from the queue and then after passes that message to a new thread for processing ?

    But having a single queue might hamper the performance.

    Is there any other way which can cater my requirement ? what do you suggest?