What Is New in RabbitMQ 3.11
RabbitMQ 3.11 is a feature release focused on scaling streams, modernizing authentication, and improving core performance. The key updates are summarized below.
| Category | Key Changes |
|---|---|
| New Features |
|
| Core Improvements |
|
| Bug Fixes |
|
| Plugin Updates |
|
| Breaking Changes |
|
What are the major upgrades in the core server?
The core server sees significant performance and reliability improvements. Connection tracking is now more efficient, which directly lowers CPU usage in environments with high connection churn. This is a common scenario in cloud deployments where containers frequently connect and disconnect.
Publishers using the default exchange will see a noticeable throughput gain of 10% to 20%. This is achieved through internal optimizations in the message routing logic.
Operationally, you can now set a default queue type (e.g., quorum or classic) when creating a virtual host. This simplifies policy management and enforces queue type standards across your applications.
How have streams been enhanced?
Streams receive major new features aimed at production scalability. Super streams introduce native partitioning, allowing a logical stream to be split across several underlying stream nodes. This is the primary method for scaling out stream throughput and storage.
Single Active Consumer (SAC) support is now available for streams. This provides exclusive consumption and continuity, preventing the same message from being processed by multiple consumers—ideal for work queue patterns over streams.
The stream protocol itself is extended. Clients and servers can exchange capability information, and a new command allows applications to inspect stream metadata. Consumers can also now query their committed offset.
What's new for authentication and management?
The OAuth 2 plugin now supports a wider range of identity providers and OpenID Connect, making it easier to integrate with modern enterprise SSO systems. It also adds support for Rich Authorization Requests (RAR), enabling more granular and expressive authorization policies.
The Management plugin benefits from these OAuth 2 improvements for UI login. Additionally, its HTTP API is now more efficient. By switching to a different JSON serialization library, responses for large queries (like listing thousands of connections) are generated faster and with significantly lower peak memory usage.
New API endpoints allow listing and closing all connections for a specific user, improving operational control for administrators.
Are there important changes for other plugins?
Yes, several plugins received quality-of-life and stability updates. Both the MQTT and STOMP plugins now support a configurable authentication timeout, aligning them with other protocols and helping to manage misbehaving clients.
The Shovel plugin has improved memory management for Dynamic Shovels operating in "on publish" mode. It now uses internal flow control to prevent memory ballooning if the publishing side is faster than the target, making it more resilient.
The Grafana dashboard was updated to correctly use global counters introduced in RabbitMQ 3.9, ensuring accurate metrics on the overview page.
What dependencies were upgraded?
Key internal libraries have been updated. The consensus library ra was upgraded to 2.3.0 and the streaming engine osiris to 1.3.0, which underpin quorum queues and streams. The prometheus client library was updated to 4.9.0.
A notable change is the replacement of the jsx JSON library with thoas. This swap is responsible for the improved performance and lower memory footprint in the Management API's JSON serialization.
FAQ
What is the most critical pre-upgrade step for RabbitMQ 3.11?
You must enable all feature flags introduced in the 3.8.x release series. If any are disabled, the 3.11 node will refuse to start. Run rabbitmqctl list_feature_flags to check status and rabbitmqctl enable_feature_flag for any that are disabled.
Why does RabbitMQ 3.11 require Erlang 25?
Erlang 25 brings feature parity for ARM64 and x86 architectures, including the JIT compiler and modern flame graph profiling tools. It also provides the latest TLS 1.3 implementation. This is a baseline for performance and security improvements.
How do I support more than 65536 concurrent connections now?
The default open file handle limit is now capped. To increase it, you must: 1) Raise the OS limit (e.g., via systemd), and 2) Set the ERL_MAX_PORTS environment variable to your desired value, like 100000.
Can I run 3.11 nodes in a cluster with 3.10 nodes?
Yes, for a rolling upgrade. However, 3.11-specific features like super streams will not be available until all nodes are upgraded. Run mixed-version clusters only for the short duration of the upgrade.
What is a "super stream" and when should I use it?
A super stream is a partitioned stream. It spreads a large logical stream across several regular stream nodes, distributing load and storage. Use it when you need to scale a single stream's throughput beyond the capacity of one RabbitMQ node.