What Is New in RabbitMQ 3.5
RabbitMQ 3.5 introduced significant enhancements focused on protocol support, management, and core stability. The key updates are summarized below.
| Category | Key Changes |
|---|---|
| New Features | Built-in MQTT plugin, Shovel plugin improvements, STOMP 1.1 and 1.2 support. |
| Improvements | Memory usage optimization, better Windows service control, enhanced HTTP API for management. |
| Bug Fixes | Numerous fixes for message persistence, clustering edge cases, and plugin lifecycle. |
| Deprecated | Legacy Erlang client driver (obsoleted by native drivers). |
How Did MQTT Support Evolve in 3.5?
Version 3.5 marked a major step by including a supported MQTT plugin out of the box. Before this, MQTT support was experimental or required manual compilation.
This plugin enabled RabbitMQ to act as a full MQTT 3.1 broker, bridging the gap between IoT-style messaging and AMQP-based enterprise backends. In practice, it allowed devices publishing MQTT messages to have those messages consumed by AMQP or STOMP clients seamlessly.
Key MQTT Plugin Details
- Plugin name:
rabbitmq_mqtt - Supported MQTT QoS levels 0 and 1.
- Topic routing mapped directly to AMQP exchanges and routing keys.
What Management and Monitoring Upgrades Were Added?
The management plugin received several new endpoints and data exposures in its HTTP API.
You could now retrieve more granular statistics on per-channel and per-connection basis, which was crucial for debugging high-throughput systems. The API also improved its JSON structure for consistency.
# Example: Listing connections with new details
GET /api/connections
# Response included more metrics on message rates and state.
For operators, the Windows service management scripts were overhauled, making start/stop operations more reliable.
Were There Core Performance and Memory Tweaks?
Yes, the 3.5 series included optimizations for memory use under certain workloads, particularly for persistent messages and when using lazy queues.
The internal message store saw improvements that reduced disk I/O overhead. This mattered because earlier versions could see performance degradation with many idle queues holding persistent messages.
Garbage collection settings for the underlying Erlang VM were also tuned for better long-term stability, reducing the risk of memory spikes.
What Changed for Shovel and Federation?
The Shovel plugin, used for reliable message transfer between brokers, became more configurable and resilient.
You could now define Shovel links dynamically via the management API or statically via config file. The plugin better handled reconnection logic and network partitions, making it more suitable for WAN links.
# Static shovel configuration in rabbitmq.config
{rabbitmq_shovel, [
{shovels, [
{my_shovel, [
{sources, [...]},
{destinations, [...]}
]}
]}
]}
Were Any Features Deprecated or Removed?
The primary deprecation was the legacy Erlang client driver, which was part of the server distribution. Its functionality was superseded by the standalone amqp_client library.
This change streamlined the server package and pushed users towards the maintained, versioned client libraries. It didn't affect Java, .NET, or other language clients.
FAQ
Is the MQTT plugin in RabbitMQ 3.5 production-ready?
Yes, it's considered stable and supported for production use. It handles MQTT 3.1 protocol semantics, including clean sessions and will messages. However, some advanced MQTT features like QoS 2 were not implemented.
Does the memory improvement mean I can run with less RAM?
Not exactly. The optimizations help prevent unnecessary memory growth during specific operations, but your RAM requirements still depend on your queue depth, message size, and connection count. It's more about efficiency than reducing minimum specs.
Can I upgrade directly from RabbitMQ 3.4.x to 3.5.x?
Generally, yes. It's a feature release, so a rolling upgrade across a cluster is supported. Always backup your definitions and check plugin compatibility first, as some community plugins might need updates.
What happened to the deprecated Erlang client driver?
It was removed from the main server package. If you were embedding the Erlang client directly from the server's ebin directory, you needed to switch to the standalone amqp_client Erlang package, available via standard Erlang/OTP tools.
Are the new Shovel features backward compatible?
Mostly. Static configuration from earlier versions still works. The new dynamic management API is additive. However, the improved reconnection logic might change behavior during network failures, so test your failover scenarios.