6 Open Source Enterprise Messaging Software Solutions
Software applications are growing more and more complex every year. One architectural solution implemented is the Service Oriented approach and the Microservices approach. In both cases, two or more independent applications (the services) communicate with each other in order to get data.
This communication happens as a simple request - response cycle. One of the services makes a request to another (or what we call a message) then the other application sends in the response.
A lot of times, however, the simple request - response cycle does not happen smoothly or synchronously.
Let’s say the service your application wants to connect is undergoing maintenance and it’s offline. The time it gets back online you don’t want to send the exact same request. You want to just receive the response to the request you sent when it was down.
In another instance, there might be lots of services that send a message to a central database and there will be a backlog of responses that the database server needs to make.
This is where we need Message Brokers (or Message Queue softwares). They are simply applications that facilitate the asynchronous process of messaging. Message responses don’t need to immediately get sent to the message consumer.
Regardless of the state of any of the applications/services communicating with each other, we need some sort of way that makes sure this message exchange happens smoothly and efficiently.
Here are 6 of the most widely used open-source Message Brokers/Message Queue Softwares.
ActiveMQ
ActiveMQ is a protocol written in Java and is a message-oriented-middleware (MoM). Message brokers based on it are actually implementations of the Java Messaging Service (JMS).
Just like all messaging solutions, ActiveMQ, facilitates the smooth asynchronous process of messaging between applications. It’s a choice for enterprise-grade purposes as it provides data integrity and a low data loss rate.
One of the problems that ActiveMQ solves is being able to “federate” applications built on different languages. While this is a task all message brokers are good at, ActiveMQ is undoubtedly one of the best at it. One can also extend ActiveMQ’s features by contacting commercial companies such as Amazon Web Services, Red Hat, Tomitribe or Open Logic
RabbitMQ
RabbitMQ originally was implementing the Advanced Messaging Queuing Protocol (AMQP) which is used to create message-oriented middlewares. RabbitMQ is also flexible as it can also be extended using MQ Telemetry Transport (MQTT) for use cases such as for IoT devices.
RabbitMQ is built using Erlang OTP which enables it to be used to build systems requiring high scalability and stability.
It allows for easy transition for monoliths to be broken down into several smaller systems. RabbitMQ helps in solving issues related to service discovery, and making sure messages are stored in a buffer in order to avoid loss when any of the services are unavailable.
RabbitMQ can also be easily used for microservices and even into legacy systems.
Qutrunk
Qutrunk is a project by an organization called CodeFibers. It is a messaging platform where you use RESTful API to send and receive messages while ensuring their reliability. One of the best features is its graphical user interface that you can access through the browser.
Users of Qutrunk simply need to create an account. To start implementing it, they just need to create simple GET or POST requests.
On top of this functionality, Qutrunk also provides insights on messages pushed and pulled. Since it’s a SaaS platform you can also provide access rights on other users in the team.
Apache Qpid
Apache Qpid is another tool that implements the Advanced Message Queuing Protocol (AMQP). It consists of two major components - Messaging APIs designed for building applications using AMQP, and Messaging Servers to be used in deploying AMQP networks.
The Messaging API has the following components: Qpid Proton which is a toolkit for using any application with AMQP, and Qpid JMS - for doing AMQP in JMS.
It also has a user-friendly web management console/interface for its messaging tool.
Celery Project
Task queues are simply a way to execute actions (or tasks) in parallel without blocking each other. Messages are like tasks in that way. Processing messages like tasks can be done by a tool called Celery.
Celery is a tool for Python web applications that allows tasks to be executed outside of the regular HTTP request-response cycle. Services communicate in Celery using messages (hence we can think of Celery as a message broker itself).
Redis (through RSMQ)
Redis is not designed by itself as a message broker. It is a tool used for enhancing software application performance by providing in-memory data storage. It is mostly used for caching responses from external API’s.
It, however, can be extended through Redis Simple Message Queue (RSMQ). RSMQ is essentially a tool for NodeJS applications that extend Redis’ capabilities without needing any external servers.
Because of Redis’ versatility it is increasingly becoming a tool of choice for message queuing as well.
Final Thoughts
Since decoupling systems is becoming more and more a prefered approach to scaling, message brokers/queueing softwares also have increased importance. It is essential, however, before selecting which tool to use to first understand the kind of architecture and decoupling you are going to be implementing in your system/application.