Cloud Parts

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 →

How it fits with other technologies

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

  1. 2003

    John O’Hara starts designing AMQP at JPMorgan

  2. 2007

    RabbitMQ 1.0 released in February by LShift and CohesiveFT

  3. 2010

    SpringSource (VMware) acquires Rabbit Technologies

  4. 2019

    3.8 adds Raft-based quorum queues

  5. 2021

    3.9 adds streams, a replayable append-only log

  6. 2024

    4.0 speaks AMQP 1.0 natively and drops mirrored queues

  7. 2026

    4.3 removes Mnesia; the Raft-based Khepri stores all metadata

Sources13 · facts checked 5 October 2026

Improve this page on GitHub