A Guide to RabbitMQ
- Erlang Solutions Team
- 4th Apr 2024
- 8 min of reading time
Looking to learn more about the basics of RabbitMQ? This powerful message broker plays a key role in modern, distributed systems.
This post will break down its fundamentals and highlight its importance in the world of modern, distributed systems.
RabbitMQ emerged from the need to create a scalable, robust messaging system that was able to handle high volumes of communications between applications, all while maintaining both data and performance.
It is now a popular open-source messaging broker, with queue software written in Erlang. One of its key strengths is its ability to support and adhere to Application Programming Interface (API) protocols, for example, AMQP, HTTP AND STOMP.
What are APIs you ask?
They define the rules and conventions that allow for the interaction and communication of different software. For developers, APIs are the go-between that allows them to access a software or services functionality, without the need for a full understanding of the ins and outs of that particular system.
In turn, these protocols offer a standard method of transmitting commands and data. The result? Seamless integration and interoperability between different systems.
Let’s circle back to one previously mentioned protocol, the Advanced Message Queuing Protocol or AMQP. This protocol was made to ensure that messages are reliably delivered between applications, no matter where the platform it is running on is located. AMQP has precise rules for the delivery, formatting and confirmation of messages. This ensures that every message sent through an AMQP-based system, like RabbitMQ, reaches its intended location.
Here’s an illustration better explaining the AMQP system:
Source: The Heart of RabbitMQ
Developers use RabbitMQ to efficiently process high-throughput and reliable background jobs and facilitate the integration and communication between applications. It is also great at managing complex routing to consumers by integrating various applications and services.
RabbitMQ is also a great solution for web servers that require a rapid-request response. It also effectively distributes workloads between workers, handling over 20,000 messages per second. It can manage background jobs and longer-running tasks, for example, PDF conversion and file scanning.
Think of RabbitMQ as a middleman. It collects messages from a producer (publisher) and passes them on to receivers (consumers). Using a messaging queue, it then holds messages until the consumers can process them.
Here’s a better overview of these core systems:
Producer (publisher) | It sends messages to a queue for processing by consumers. |
Queue | Where messages are transferred and stored until they can be processed. |
Consumer (receiver) | It receives messages from queues and uses them for other defined tasks. |
Exchange | The entry point for the messaging broker. It uses routing rules to determine which queues should receive the message. |
Broker | A messaging system that stores produced data. Another application can connect to it using specific details, like parameters or connection strings, to receive and use that data. |
Channel | Channels offer a lightweight connection to a broker via a shared Transmission Control Protocol (TCP) connection. |
Source: RabbitMQ tutorials
As one of the most powerful and flexible messaging systems, RabbitMQ offers several key features, including:
Security: Various security features in RabbitMQ are designed to protect systems from unauthorised access and potential data breaches. With authentication and authorisation support, administrators can control which users or applications have access to certain queues or exchanges. It also supports SSL/TLS encryption, to ensure clear communication between brokers and clients.
Reliability: Reliable message delivery by supporting features, such as message acknowledgement and persistent message storage.
Scalable and fault-tolerant: RabbitMQ provides features for building scalable and fault-tolerant messaging systems. It also supports clustering, whereby adding more nodes to the cluster allows the system to handle higher message volumes. It’s then able to distribute the workload across multiple nodes, making for efficient utilisation of resources. In the case of a node failure, other nodes in the cluster can continue to handle messages without interruption.
Extended features: RabbitMQ is not limited to the AMQP protocol, but is very versatile and can support a host of others, such as MQTT and STOMP.
Enterprise and the Cloud: RabbitMQ is lightweight and easy to deploy on the public as well as private clouds using pluggable authentication authorisation.
Tools and Plugins: RabbitMQ offers a host of tools and plugins, ideal for integration and wider support.
We’ve already highlighted the versatility of RabbitMQ in modern distributed systems. With its robust features and flexible architecture, here are some most common use cases:
Legacy applications: RabbitMQ integrates with legacy systems by using available or custom plugins. You can connect consumer apps to legacy apps for example, connecting JMS apps using the Java Message Service (JMS) plug-in and JMS client library.
Distributed systems: RabbitMQ serves as a messaging infrastructure in distributed systems. It fosters asynchronous communication between different components, facilitating the scalability and decoupling of the system.
IoT applications: When used in Internet of Things (IoT) applications, RabbitMQ can handle the exchange of messages between devices and backend systems, allowing for reliable and efficient communication, control and real-time monitoring of IoT devices.
Chat applications: For real-time communication in chat applications, RabbitMQ manages messaging exchanges between users, facilitating group chat and instant messaging functionalities.
Task/job queues: RabbitMQ manages task queues and distributes work across multiple workers. This means that tasks are processed efficiently and at scale, reducing bottlenecks and utilising resources.
Event-driven architectures: RabbitMQ is great for carrying out event-driven architectures.
It allows various system components to respond to events and seamlessly interact with each other.
Microservices communication: A common use of RabbitMQ is enabling asynchronous and reliable communication between microservices. Messages are delivered, even if some services are unavailable.
As businesses seek to adopt distributed architectures and microservices-based applications, RabbitMQ remains a go-to choice for improved adaptability and seamless integration across systems. If you’d like to discuss how RabbitMQ can improve your applications, get in touch with the Erlang Solutions team.
Meet Erik Schön, Managing Director and and Nordics Business Unit Lead at Erlang Solutions. He shares his 2025 highlights and festive traditions.
Attila Sragli explores the BEAM VM's inner workings, comparing them to the JVM to highlight their importance.
Pawel Chrząszcz introduces MongooseIM 6.3.0 with Prometheus monitoring and CockroachDB support for greater scalability and flexibility.