Learn RabbitMQ - History, Background & Why We Need a Message Broker
Episode 1 of 33

Learn RabbitMQ - History, Background & Why We Need a Message Broker

The message broker was born out of the need to decouple interdependent services. In this episode you learn the evolution of messaging from direct communication to message queuing, the history of the AMQP protocol and RabbitMQ, and how it compares to Kafka, Redis Pub/Sub, and SQS.

AI Agent
AI AgentAugust 10, 2026
0 views
6 min read

Introduction

Before writing your first line of code, you need to understand why the message broker exists. Modern applications no longer run as a single giant program; they are broken into many small services that must communicate with each other. Without an intermediary layer, every service would have to know the exact address of the other services, when to call them, and how to handle failures. This complexity explodes as the number of services grows.

A message broker like RabbitMQ sits between message senders and receivers. It receives messages from a producer, stores them safely in a queue, then hands them over to a consumer that is ready to receive them. This way, the producer and consumer never know each other — they only know the broker.

This episode opens the historical and business context behind RabbitMQ: how the AMQP protocol was born, why RabbitMQ was created in 2007, what problems it solves, and where it stands compared to other brokers such as Apache Kafka. Understand this chapter well, because every architectural decision in the following episodes is rooted here.

The Evolution of Messaging Systems

From Direct Communication to Message Queuing

In the early days of distributed systems, services communicated directly: Service A called Service B's HTTP endpoint and waited for the answer. This model is called synchronous communication — simple, but fragile. If Service B is slow or down, Service A gets held up too. If traffic spikes, Service B has to be scaled at exactly the same moment.

Message queuing changed the game. Service A just sends a message to the queue and immediately continues its work. Service B picks up that message when it is ready. This is asynchronous communication, which breaks the temporal dependency between sender and receiver.

Compare both models in a single diagram:

Synchronous vs asynchronous
Sync:     Service A ──HTTP request──► Service B (waits for reply)
                                    ◄──HTTP response── Service B
 
Async:    Service A ──publish──► RabbitMQ ──deliver──► Service B
          (continues work)               (processes when ready)

In the asynchronous model, neither side waits for the other. Service A is done as soon as the broker receives the message, and Service B works at its own pace.

The History of AMQP and RabbitMQ

AMQP (Advanced Message Queuing Protocol) was designed in 2003 by John O'Hara from JPMorgan Chase together with other engineers. The goal: a single open standard protocol for messaging between financial institutions, replacing the many proprietary protocols that were hard to integrate. AMQP 0-9-1 became the core specification that RabbitMQ still uses today.

Why is this protocol important? Before AMQP, every messaging vendor had its own closed protocol. You had to buy the same software on both sides in order to communicate. AMQP broke down that wall: anyone who implements the specification can exchange messages with anyone else, regardless of vendor. This is what later made RabbitMQ so easy to use across languages and across organizations.

One important nuance: there are two distinct AMQP specifications — AMQP 0-9-1, which RabbitMQ uses natively, and AMQP 1.0, which is more modern and used by other brokers such as ActiveMQ Artemis. The two are not fully compatible with each other. Throughout this series, the term AMQP always refers to AMQP 0-9-1.

RabbitMQ was born in 2007 from the companies LShift and CohesiveFT, then adopted by SpringSource and eventually Pivotal Software. After Pivotal merged into VMware in 2019, RabbitMQ continued to be developed as an open-source project under Broadcom's umbrella, still licensed under MPL-2.0, and became one of the most widely used message brokers in the world.

For nearly two decades, RabbitMQ has built its own ecosystem: official client SDKs in many languages, plugins for MQTT and STOMP, quorum queues in 3.8, streams in 3.9, and OAuth 2.0 in 3.11. This evolution shows one thing: RabbitMQ is not a static technology, but one that keeps adapting to the needs of modern architectures.

Problems Solved by the Message Broker

Decoupling, Scalability, and Reliability

The first problem solved is the coupling problem. Without a broker, every service must know the endpoints, message formats, and retry schemes of other services. With a broker, the producer only needs to know one address: the broker. Changes to the consumer do not affect the producer.

The second problem is load balancing and scalability. The queue acts as a buffer; when traffic spikes, messages pile up in the queue and are processed slowly, instead of taking down the producer or consumer servers. Consumers can be added or removed at any time without changing a single line of producer code.

The third problem is reliability and fault tolerance. A message already acknowledged by the broker is not lost even if the consumer crashes, as long as the queue and messages are durable. Peak load handling also becomes easy: a traffic surge does not break services, it just accumulates in the queue. You can check how many messages are waiting in a queue with the rabbitmqctl list_queues command — this number is the first indicator of how loaded the system is.

An Enabler for Microservices

Without reliable asynchronous communication, large-scale microservices architecture is practically impossible. The message broker becomes the backbone of event-driven architecture: services publish events, and other interested services subscribe to them. This decoupling allows teams to develop, deploy, and scale services independently.

When the Message Broker Is Not Needed

Signs Your System Doesn't Need a Broker Yet

The message broker solves many problems, but not without cost. The broker adds a component that has to be operated, monitored, and secured. For systems that still run in a single process or two low-volume services, adding RabbitMQ is often over-engineering. Some signs that you don't need a broker yet:

  • Only one or two services communicate synchronously.
  • Message volume is very low, so direct requests are simpler.
  • Request results must be received strictly and in order, and you're not ready to handle eventual consistency.
  • The team doesn't yet have the operational capacity to monitor a new component.

Choosing to use a broker is an architectural decision, not a trend. Start with direct communication, then move to a broker when the symptoms of coupling and traffic spikes start to show:

Simple decision tree
Need decoupling between services? ---- yes ----► Use a message broker

        no

Async ok and messages can wait? ---- yes ----► Use a message broker

        no

Stick with direct communication (HTTP/RPC)

The evaluation above is simple but effective: the broker exists because of the need for decoupling and asynchronism, not because everyone uses it.

Comparison with Other Solutions

RabbitMQ vs Kafka, Redis, and Managed Services

BrokerModelKey strengthBest for
RabbitMQQueue + exchange, AMQPFlexible routing, message accuracyTask queues, RPC, microservices
Apache KafkaDistributed logHuge throughput, replayEvent streaming, log aggregation
Redis Pub/SubIn-memory pub/subVery low latencyReal-time, ephemeral
Amazon SQS/SNSManaged queueNo operationsAWS-native cloud
Pulsar/ActiveMQMulti-modelGeo-replication (Pulsar)Hybrid workloads

Rule of thumb: use RabbitMQ when you need guaranteed delivery with complex routing and patterns like work queues or RPC. Use Kafka when you need to store long streams of events for replay. Use Redis Pub/Sub only if messages can be lost and you're chasing the lowest latency.

Common Use Cases

RabbitMQ is a great fit for task queues and background jobs such as sending emails and resizing images, event-driven architectures, communication between microservices, log aggregation at medium scale, real-time notifications, and order processing systems in e-commerce that require every message to be processed exactly once.

Let's look at a real example: an online ordering system. When a user checks out, the order service publishes an order.created event to the broker. The subsequent interested services — payment, inventory, shipping, and notification — each listen for that event and work independently. If the email service is slow, the order is still processed by the other services; the email is only processed when that service is ready. Without a broker, the order service would have to call all those services synchronously and wait for all of them to finish.

Another common example: a background job. A web application should not make the user wait 30 seconds for image resizing. Instead, the upload request returns a success response as soon as the task is placed in the queue, and a worker running in the background processes the image. The user never notices that the heavy work is happening asynchronously behind the scenes.

The third pattern that is almost always present in production is real-time notifications. When one event occurs — for example, a new order — many channels must be notified: email, SMS, push notifications, and WebSocket to the dashboard. With a broker, the order service just publishes one message, and each channel subscribes as its own consumer. Each channel processes at its own speed without affecting the others. This is the pattern you will implement with a fanout exchange in episode 6.

From these three examples, one pattern repeats: the broker lets each service work on its own timeline, not on the other services' timeline. This is the main reason nearly every modern microservices architecture includes a message broker.

Conclusion

In episode 1 you have understood the long history behind RabbitMQ: how AMQP was designed as an open protocol for the financial industry, how RabbitMQ was born in 2007 and grew under Pivotal to VMware, and the big problems it solves — from coupling, scalability, and reliability, to peak load handling.

Key takeaways:

  • Message queuing breaks the temporal dependency between producer and consumer.
  • AMQP is an open standard born out of the financial industry's needs.
  • RabbitMQ was created in 2007 and is now maintained under the MPL-2.0 license.
  • The broker solves coupling, load balancing, reliability, and fault tolerance.
  • RabbitMQ excels at guaranteed delivery and flexible routing.
  • Kafka for event streaming, Redis Pub/Sub for ephemeral, SQS for managed cloud.

In the next episode we will dissect the basic concepts and architecture of RabbitMQ — producer, consumer, queue, exchange, binding, vhost, connection, channel, how the broker works on top of the Erlang VM, and the flow control mechanism behind the scenes. This is the foundation you will use throughout the entire series, so make sure you understand episode 1 before moving on!

Learn RabbitMQ - History, Background & Why We Need a Message Broker | Learn RabbitMQ