RabbitMQ’s core protocol has been AMQP 0.9.1.
To support MQTT, STOMP, and AMQP 1.0, the broker transparently proxies via its core protocol.
While this is a simple way to extend RabbitMQ with support for more messaging protocols,
it degrades scalability and performance.
In the last 9 months, we re-wrote the MQTT plugin to not proxy via AMQP 0.9.1 anymore.
Instead, the MQTT plugin parses MQTT messages and sends them directly to queues.
This is what we call Native MQTT.
The results are spectacular:
- Memory usage drops by up to 95% and hundreds of GBs with many connections.
- For the first time ever, RabbitMQ is able to handle millions of connections.
- End-to-end latency drops by 50% - 70%.
- Throughput increases by 30% - 40%.
Native MQTT turns RabbitMQ into an MQTT broker opening the door for a broader set of IoT use cases.
Native MQTT ships in RabbitMQ 3.12.
Quorum Queues are a superior replacement for Classic Mirrored Queues
that were introduced in RabbitMQ version 3.8. And there are two
complementary reasons why you would need to migrate.
First of all, Classic Mirrored Queues were deprecated in 3.9, with a
formal announcement posted on August 21, 2021. They will be removed
entirely in 4.0
But also they are more reliable and predictable, faster for most
workloads and require less maintenance - so you shouldn’t feel that
your hand is being forced without no apparent reason.
Quorum Queues are better in all regards, but they are not
100%-compatible feature-wise with Mirrored Queues. Thus the migration
can look like a daunting task.
After a sneak peek into the future performance improvements, this post
will outline a few possible migration strategies, including guidance
on how to deal with all the incompatible features. Hopefully making
migration process not so scary.