2.2.0

Latest release in branch 2.2
Released 30 Nov 2010 (15 years ago)

SoftwareRabbitMQ
Branch2.2
Initial release2.2.0
30 Nov 2010 (15 years ago)
Latest patch release2.2.0
30 Nov 2010 (15 years ago)
Release noteshttps://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v2_2_0
Source codehttps://github.com/rabbitmq/rabbitmq-server/tree/rabbitmq_v2_2_0
RabbitMQ 2.2 ReleasesView full list

What Is New in RabbitMQ 2.2

RabbitMQ 2.2 introduced significant improvements in performance, protocol support, and management capabilities. This release focused on making the broker more robust and feature-complete for production environments.

Category Key Changes
New Features Per-Queue Message TTL, Basic.NACK, Exchange-to-Exchange Bindings
Protocol Support AMQP 0-9-1 Compliance, Enhanced STOMP Support
Management & Monitoring Improved Management Plugin, Better Runtime Metrics
Performance & Scalability Memory Usage Optimizations, Faster Message Routing
Bug Fixes Various stability and connection handling fixes

How did message handling get better in 2.2?

The introduction of per-queue message TTL and Basic.NACK were game-changers. Before 2.2, message Time-To-Live was only configurable on a per-message basis, which was cumbersome for many use cases.

Per-queue TTL lets you set an expiration policy directly on a queue, automatically discarding any message that exceeds the specified age. This is perfect for implementing dead-lettering patterns and keeping queues from growing indefinitely with stale data.

Basic.Nack brought a crucial negative acknowledgment mechanism to the AMQP protocol. Unlike Basic.Reject, it supports rejecting multiple messages at once and can requeue them or not. This massively improves error handling efficiency for consumers.

What protocol enhancements were made?

RabbitMQ 2.2 solidified its support for AMQP 0-9-1, moving closer to full protocol compliance. This ensured better interoperability with clients from different vendors and future-proofed deployments.

Exchange-to-exchange bindings were a major addition. This feature allows you to bind exchanges to other exchanges, creating more sophisticated and flexible routing topologies. It enables a form of pub/sub where you can fan out messages through a hierarchy of exchanges.

The STOMP adapter also received attention, making RabbitMQ a more versatile message hub for web and mobile clients that use this simpler protocol.

How was management and monitoring improved?

The management plugin became significantly more powerful in this release. It provided deeper insights into the broker's runtime state, which is critical for diagnosing issues in production.

You got better visibility into connection and channel counts, queue depths, and message rates. These metrics are essential for capacity planning and understanding the load patterns on your messaging infrastructure.

In practice, this meant you could spot bottlenecks faster and make more informed decisions about scaling your RabbitMQ clusters without needing to rely solely on external monitoring tools.

What performance optimizations were included?

Memory management saw important optimizations that helped with stability under heavy load. The broker became more efficient at handling memory pressure, reducing the likelihood of crashing during traffic spikes.

Message routing performance improved through internal algorithm enhancements. This mattered because it directly translated to higher throughput and lower latency for applications pushing large volumes of messages.

These under-the-hood changes made RabbitMQ 2.2 capable of handling more demanding workloads, setting the stage for the high-performance characteristics of later versions.

FAQ

What's the real-world use case for per-queue TTL?
It's ideal for situations where you want messages to automatically expire after a certain period, like temporary data caches, time-sensitive notifications, or any scenario where stale data loses its value. You set it once on the queue instead of on every single message.

How does Basic.Nack differ from Basic.Reject?
Basic.Reject only handles one message at a time and doesn't support multiple negative acknowledgments. Basic.Nack lets you reject multiple messages in a single operation and gives you control over whether they get requeued, making it far more efficient for batch processing errors.

Can I mix AMQP 0-9-1 and STOMP clients in the same cluster?
Yes, absolutely. RabbitMQ 2.2's enhanced protocol support means different types of clients can publish and consume from the same exchanges and queues. This interoperability is one of RabbitMQ's strengths as a messaging hub.

Do exchange-to-exchange bindings impact performance?
They add a minimal overhead since messages are routed through an additional hop. However, the flexibility they provide for designing complex routing patterns often outweighs the tiny performance cost in most applications.

Was upgrading to 2.2 from earlier versions straightforward?
Generally yes, as it maintained backward compatibility for existing clients and configurations. The main consideration was testing how new features like per-queue TTL might affect your specific messaging patterns during the rollout.

Releases In Branch 2.2

Version Release date
2.2.0 30 Nov 2010
(15 years ago)