Skip to content

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

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?