RabbitMQ¶
Mature multi-protocol message broker — AMQP 0-9-1, AMQP 1.0, MQTT, STOMP, and RabbitMQ Streams in one binary, with quorum queues and Khepri metadata.
Overview¶
RabbitMQ is the long-running open-source AMQP 0-9-1 broker that has evolved into a multi-protocol messaging and streaming platform. The 4.x line (current as of 2026) replaces the historical Mnesia metadata store with Khepri (Raft-backed) and treats quorum queues and streams as the recommended primary abstractions, deprecating classic mirrored queues.
Key Facts¶
| Attribute | Detail |
|---|---|
| Website | rabbitmq.com |
| GitHub | rabbitmq/rabbitmq-server |
| Stars | ~13k+ ⭐ |
| Latest Version | 4.2.x (Khepri default) |
| Language | Erlang/OTP |
| License | Apache-2.0 (server), MPL-2.0 (some plugins) |
| Steward | Broadcom (acquired VMware in 2023) — engineering still done by the original RabbitMQ team |
| Commercial | Tanzu RabbitMQ (Broadcom), CloudAMQP (84codes), AWS MQ for RabbitMQ |
| Protocols | AMQP 0-9-1, AMQP 1.0, MQTT 3.1.1 / 5.0, STOMP, RabbitMQ Streams |
Evaluation¶
| Pros | Cons |
|---|---|
| Most flexible routing (direct/topic/fanout/headers/consistent-hash exchanges) | Not built for log-replay analytics — use Streams for that |
| Mature operator and Helm charts | Erlang/OTP runtime — fewer ops staff with debugging skills |
| Quorum queues = strong durability via Raft | Classic mirrored queues are deprecated; legacy migration may be needed |
| Khepri removes the historical "split-brain partition strategy" choice | Khepri is breaking change for tooling that introspects Mnesia |
| 1M+ msg/sec achievable on streams; ~50–100k/sec on quorum queues | Memory-bound at high message counts unless using lazy/quorum modes |
| Excellent management UI + HTTP API | Not as low-overhead as NATS for sub-ms request-reply |
| Plugin ecosystem (Federation, Shovel, MQTT, Stream) | Plugin compatibility lags behind the server line on first releases |
Architecture¶
flowchart TB
Pub["Publisher"]
subgraph BrokerNode["RabbitMQ Node 1 (Erlang VM)"]
ExchangeRouter["Exchange Router"]
DirectExchange["DirectExchange"]
TopicExchange["TopicExchange"]
FanoutExchange["FanoutExchange"]
HeadersExchange["HeadersExchange"]
ConsumerHandler["Consumer Handler"]
QQ["QuorumQueue\n(Raft replicated)"]
Stream["Stream\n(append-only segments)"]
ClassicQ["ClassicQueue\n(legacy)"]
Khepri["Khepri\n(Raft metadata)"]
end
subgraph BrokerNode2["RabbitMQ Node 2"]
QQ2["QuorumQueue follower"]
Stream2["Stream follower"]
Khepri2["Khepri follower"]
end
subgraph BrokerNode3["RabbitMQ Node 3"]
QQ3["QuorumQueue follower"]
Stream3["Stream follower"]
Khepri3["Khepri follower"]
end
Consumer["Consumer"]
Pub --> ExchangeRouter
ExchangeRouter --> DirectExchange
ExchangeRouter --> TopicExchange
ExchangeRouter --> FanoutExchange
ExchangeRouter --> HeadersExchange
DirectExchange --> QQ
TopicExchange --> QQ
FanoutExchange --> ClassicQ
HeadersExchange --> Stream
QQ -.Raft.-> QQ2
QQ -.Raft.-> QQ3
Stream -.Raft.-> Stream2
Stream -.Raft.-> Stream3
Khepri -.Raft.-> Khepri2
Khepri -.Raft.-> Khepri3
ConsumerHandler --> Consumer
QQ --> ConsumerHandler
See messaging/rabbitmq/architecture for component-level details.
Use Cases¶
- Work queues with retry, dead-letter, prefetch — the classic AMQP RPC work queue.
- Complex routing — topic exchanges with multi-level wildcards; headers exchanges for content-based routing.
- Backwards-compatible AMQP — many existing apps speak AMQP 0-9-1; RabbitMQ remains the canonical broker.
- Streams for high-throughput log workloads without needing Kafka.
- MQTT broker for IoT — RabbitMQ MQTT plugin handles 3.1.1 and 5.0 (with QoS, retained messages).
- Hybrid deployments — Federation across data centers; Shovel for one-off bridges.
Licensing & Pricing¶
- Open source: Apache-2.0 for the server, MPL-2.0 for some plugins, all free.
- Tanzu RabbitMQ (Broadcom): commercial subscription with the Tanzu RabbitMQ Operator, warm standby replication, and 24×7 support.
- CloudAMQP: managed RabbitMQ with single-tenant clusters; per-instance pricing.
- AWS MQ for RabbitMQ: AWS-managed brokers with VPC integration.
- Confluent has not added RabbitMQ to its cloud offering.
Ecosystem¶
- Operators: RabbitMQ Cluster Kubernetes Operator, Messaging Topology Operator.
- Plugins: Federation, Shovel, MQTT, STOMP, Stream, Web-MQTT, Web-STOMP, Consistent-Hash Exchange, Random Exchange, Delayed Message, OAuth 2.0, LDAP, Prometheus.
- Clients: .NET, Java, Python (
pika), Go (amqp091-go), Node.js (amqplib), Ruby, Erlang, Elixir, Rust (lapin). - Tools:
rabbitmqctl,rabbitmqadmin,rabbitmq-diagnostics,rabbitmq-streams,rabbitmq-queues, the management UI on:15672. - Observability: built-in Prometheus endpoint on
:15692; Grafana dashboards published by RabbitMQ.
Compatibility & Requirements¶
| Requirement | Detail |
|---|---|
| OS | Linux, macOS, Windows; Docker, Helm |
| Erlang | RabbitMQ 4.2 requires Erlang 26+ |
| Memory | Memory-tracking via watermark — set to ~40% of host memory by default |
| Disk | SSD strongly recommended; quorum queues fsync on every batch |
| Network | TCP 5672 (AMQP), 5671 (AMQPS), 1883/8883 (MQTT), 61613 (STOMP), 15672 (mgmt UI), 15692 (Prometheus), 5552 (Streams) |
Latest Versions¶
- 4.2.x — Khepri default backend; classic mirrored queues fully removed; quorum queues with continuous memberships.
- 4.1.x — improved stream offset tracking, MQTT 5.0 hardening.
- 4.0.x — Khepri available (opt-in).
- 3.13.x — last 3.x line; experimental Khepri.
- 3.12 and older — out of support.
Track at rabbitmq.com/release-information.
Alternatives¶
- Apache Kafka — log-structured event streaming, replayable, larger ecosystem.
- NATS — much lighter footprint, sub-ms latency, JetStream for persistence.
- Redpanda — Kafka API in C++.
- Apache Pulsar — multi-tenant, geo-replication.
- AWS SQS / SNS, Azure Service Bus, Google Pub/Sub — managed cloud-native equivalents.
Migration & Lock-in¶
- AMQP 0-9-1 is broadly supported by other brokers (e.g. ActiveMQ Artemis), but feature parity for headers exchanges + DLX semantics is rare; expect non-trivial code changes.
- Quorum queue specific options (
x-quorum-initial-group-size,x-delivery-limit) are RabbitMQ-only. - Streams are AMQP 0-9-1 streams by name only — the Stream protocol (port 5552) is RabbitMQ-specific.
- Federation/Shovel allow staged migration on or off RabbitMQ without dual writing.
Community Health¶
- Active commits on
rabbitmq-server, multiple maintainers under Broadcom. - RabbitMQ Discussion forum and Discord.
- Quarterly minor versions; CVEs disclosed via GitHub Security Advisories.
- 84codes (CloudAMQP) operates the largest known fleet — several thousand production clusters.
Sources¶
- RabbitMQ Documentation (queried via Context7
/rabbitmq/rabbitmq-website). - Khepri overview.
- Quorum Queues.
- Streams.
- RabbitMQ Cluster Operator.
- Release Information.
Open Questions¶
- For workloads with tens of thousands of small queues, what is the practical Khepri metadata footprint vs the historical Mnesia model?
- How does RabbitMQ Streams' 1M msg/sec ceiling compare side-by-side with Kafka and Redpanda on identical hardware?
- Is the OAuth 2.0 plugin's introspection mode performant enough for ~10k connections per node?
- What is the ops cost of running quorum queues at very high message counts (100M+) given the per-message Raft overhead?
- After Khepri replaces Mnesia entirely, what monitoring tools (e.g. existing rabbitmq_exporter dashboards) need updating?