2.0.0

Latest release in branch 2.0
Released 24 Aug 2010 (15 years ago)

SoftwareRabbitMQ
Branch2.0
Initial release2.0.0
24 Aug 2010 (15 years ago)
Latest patch release2.0.0
24 Aug 2010 (15 years ago)
Release noteshttps://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v2_0_0
Source codehttps://github.com/rabbitmq/rabbitmq-server/tree/rabbitmq_v2_0_0
RabbitMQ 2.0 ReleasesView full list

What Is New in RabbitMQ 2.0

RabbitMQ 2.0 is a major release that introduces significant protocol enhancements and new management features. It's a foundational update that improves how clients interact with the broker and how operators manage it.

Category Key Changes
New Features AMQP 0-9-1 support, Per-queue message TTL, Exchange-to-exchange bindings
Protocol Official AMQP 0-9-1 implementation, Enhanced flow control
Management New HTTP-based management plugin, JSON API for monitoring
Improvements Performance optimizations, Better memory management

How did RabbitMQ 2.0 change messaging protocols?

The biggest shift was the official adoption of AMQP 0-9-1 as the core protocol. This version standardized the wire protocol that most RabbitMQ clients still use today.

Before 2.0, RabbitMQ used a pre-1.0 version of AMQP. The 2.0 release locked down the protocol specification, ensuring long-term stability for client libraries. This made it much easier to develop and maintain clients across different languages.

We also saw better flow control mechanisms. This was crucial for preventing fast publishers from overwhelming consumers or the broker itself, a common pain point in earlier versions.

What new messaging features were introduced?

Two features from this release became cornerstone patterns: per-queue message TTL and exchange-to-exchange bindings.

Per-queue TTL let you set a time-to-live for messages directly on a queue. This was a game changer for implementing time-sensitive data pipelines without putting the burden on publishers.

Exchange-to-exchange bindings allowed for much more complex routing topologies. You could finally create fanout trees or chain topic exchanges together, enabling sophisticated messaging patterns that weren't possible before.

How did management and monitoring improve?

RabbitMQ 2.0 shipped with a brand-new HTTP management plugin. This was the first version where you could actually see what was happening inside your broker without relying solely on the Erlang console.

The plugin provided a web UI and a JSON API for monitoring queues, connections, and exchanges. For the first time, you could easily build custom monitoring tools or integrate RabbitMQ metrics into existing dashboards.

This management API became the foundation for all future monitoring tools in the RabbitMQ ecosystem. It dramatically reduced the operational overhead of running RabbitMQ in production.

Were there any breaking changes to be aware of?

Yes, the protocol change to AMQP 0-9-1 required client library updates. Older clients designed for the pre-1.0 AMQP protocol wouldn't work with RabbitMQ 2.0 without upgrades.

Some deprecated Erlang/OTP APIs were removed, which affected how the broker was built and packaged. This mainly impacted maintainers rather than end-users.

In practice, teams had to coordinate client updates with the broker upgrade. The protocol change was necessary for long-term stability but required some upfront migration effort.

FAQ

Do I need to update my client libraries for RabbitMQ 2.0?
Yes. The move to AMQP 0-9-1 means you'll need client libraries that support this protocol version. Most modern clients already do, but check your library's documentation.

Can I use exchange-to-exchange bindings for complex routing?
Absolutely. This feature allows you to chain exchanges, creating powerful routing trees. For example, you can route messages from a topic exchange to multiple fanout exchanges for different services.

How does per-queue TTL work compared to per-message TTL?
Per-queue TTL is set as a policy on the queue itself and applies to all messages in that queue. It's simpler to manage than having each publisher set a TTL header on every message.

Is the new management plugin enabled by default?
No, you typically need to enable it manually using rabbitmq-plugins enable rabbitmq_management. Once enabled, it provides both a web UI and a HTTP API.

What performance improvements were made in 2.0?
The release included optimizations in memory management and message routing. These reduced overhead and improved throughput, especially under heavy load with multiple queues and exchanges.

Releases In Branch 2.0

Version Release date
2.0.0 24 Aug 2010
(15 years ago)