RabbitMQ
A widely used open-source message broker that routes messages to queues through exchanges.
- What it is
- Message queues
- Used for
- Pub/sub
- Type
- Open source
- Made by
- Broadcom
- License
- MPL 2.0
- Facts checked
- 5 October 2026
What it is
In RabbitMQ, producers don’t write to a queue directly. They publish to an exchange with a routing key, and bindings decide which queues get a copy. A direct exchange matches the key exactly, a topic exchange matches patterns such as order.*.paid, a fanout exchange copies to every bound queue, and a headers exchange matches on message headers. That one model gives you work queues, pub/sub and selective routing in the same broker.
The broker pushes messages to consumers, up to a prefetch limit, and removes each one when the consumer acknowledges it. For durability, quorum queues replicate a queue across nodes using the Raft consensus algorithm; the older classic mirrored queues were removed in RabbitMQ 4.0. Streams add a replayable, append-only log type for Kafka-like reads. RabbitMQ is written in Erlang, speaks AMQP 0-9-1, AMQP 1.0 and MQTT, and is open source under the MPL 2.0, with commercial support from Broadcom.
Why teams pick it
- Flexible routing: exchanges, bindings and patterns decide per message who gets it
- Per-message acknowledgements, TTLs, dead-letter exchanges and delivery limits (quorum queues stop redelivering after 20 attempts by default)
- Several protocols and client libraries for almost every language
- Runs anywhere, from one container on a laptop to a replicated cluster
Watch out for
- You operate it: clustering, upgrades, and memory and disk alarms that block publishers when they trip
- A queue isn’t partitioned: its leader lives on one node, so one very busy queue is limited by that node
- Messages in ordinary queues are gone once acknowledged; replay needs streams
- Free community support for each release series is short; long-term support needs a commercial licence
Alternatives
What all message queues have in common →
Amazon SQSAWSAWS’s fully managed message queue: no brokers to run, billed per request.
BullMQOpen sourceThe Node.js job queue on Redis, Bull’s successor, with ports to other languages and, since v6, a Postgres backend.How it fits with other technologies
What uses RabbitMQ
Route paid orders to a quorum queue with a topic exchange (pika) · python
import pika
conn = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
ch = conn.channel()
ch.exchange_declare(exchange="orders", exchange_type="topic", durable=True)
ch.queue_declare(queue="billing", durable=True, arguments={"x-queue-type": "quorum"})
ch.queue_bind(queue="billing", exchange="orders", routing_key="order.*.paid")
ch.basic_publish(exchange="orders", routing_key="order.eu.paid", body=b'{"id": 42}')
def handle(ch, method, properties, body):
print(body)
ch.basic_ack(delivery_tag=method.delivery_tag)
ch.basic_qos(prefetch_count=10)
ch.basic_consume(queue="billing", on_message_callback=handle)
ch.start_consuming()See it in a real stack
No architecture uses RabbitMQ yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2003–2026
In the early 2000s banks ran on commercial messaging middleware such as IBM’s MQSeries, and connecting systems from different vendors was costly. In 2003 John O’Hara at JPMorgan began designing AMQP, an open wire protocol for messaging that anyone could implement, and chaired a working group to develop it.
In the summer of 2006 a small team at LShift, a London consultancy with telecoms experience, built a proof-of-concept AMQP broker on Erlang/OTP, the platform telecom companies use to run phone switches that must never go down. With backing from CohesiveFT, they released RabbitMQ 1.0 in February 2007 under the Mozilla Public License. LShift’s Matthias Radestock said their “expertise in concurrent programming for telecommunications made Erlang/OTP our natural choice.” Early versions of the server were about 5,000 lines of Erlang.
RabbitMQ became one of the most widely used open-source brokers. SpringSource, part of VMware, bought Rabbit Technologies in April 2010, and the project moved through Pivotal and back to VMware before Broadcom. Recent releases have moved it towards replicated, log-like storage: Raft-based quorum queues, streams, and native AMQP 1.0 in 4.0.
Why it’s built this way
- Implement an open standard, AMQP
- AMQP promised freedom from vendor lock-in. RabbitMQ’s exchanges, bindings and queues come straight from AMQP 0-9-1, which defined the broker’s internal model as well as the wire protocol.
- Build on Erlang/OTP
- OTP was made for phone switches that stay up under heavy load and can be patched while running. Its lightweight processes map naturally onto thousands of connections and queues.
- A smart broker that deletes on acknowledgement
- The broker routes each message, tracks acknowledgements and removes messages once handled. That makes routing and retries easy, but leaves no history to replay, which streams added in 3.9.
- Replace mirroring with Raft
- Quorum queues, added in 3.8 for high availability and data safety, replicate each queue with the Raft consensus algorithm. After three years of deprecation, 4.0 removed the older mirrored queues.
Timeline
- 2003
John O’Hara starts designing AMQP at JPMorgan
- 2007
RabbitMQ 1.0 released in February by LShift and CohesiveFT
- 2010
SpringSource (VMware) acquires Rabbit Technologies
- 2019
3.8 adds Raft-based quorum queues
- 2021
3.9 adds streams, a replayable append-only log
- 2024
4.0 speaks AMQP 1.0 natively and drops mirrored queues
- 2026
4.3 removes Mnesia; the Raft-based Khepri stores all metadata
- ACM Queue: John O’Hara, Toward a Commodity Enterprise Middleware (2007) · archived copy, original
- LShift and CohesiveFT: Launch of RabbitMQ Open Source Enterprise Messaging (press release, Feb 2007)
- Radestock and Garnock-Jones: Open-Standard Business Messaging in 5000 lines of Erlang (talk)
- VMware: SpringSource acquires RabbitMQ cloud messaging technology (Apr 2010) · archived copy, original
- Broadcom: Broadcom completes acquisition of VMware (Nov 2023)
- RabbitMQ 3.8.0 release notes (Oct 2019)
- RabbitMQ blog: RabbitMQ Streams overview (Jul 2021)
- RabbitMQ blog: 4.0 deprecation announcements (Aug 2021)
- RabbitMQ blog: Native AMQP 1.0 (Aug 2024)
- RabbitMQ 4.0 release notes (Sep 2024)
- RabbitMQ blog: RabbitMQ 4.3 highlights (Apr 2026)
- Wikipedia: RabbitMQ
Sources13 · facts checked 5 October 2026
- RabbitMQ: AMQP 0-9-1 model explained
- RabbitMQ docs: Consumer prefetch
- RabbitMQ docs: Quorum queues
- RabbitMQ docs: Streams
- RabbitMQ docs: Which protocols does RabbitMQ support?
- RabbitMQ docs: Erlang version requirements
- RabbitMQ docs: Time-to-live and expiration
- RabbitMQ docs: Dead letter exchanges
- RabbitMQ docs: Memory and disk alarms
- RabbitMQ: Clients libraries and developer tools
- RabbitMQ release information (community and commercial support)
- RabbitMQ: Commercial features (VMware Tanzu RabbitMQ)
- rabbitmq-server LICENSE (MPL 2.0)