Updated: Jan 31
Imagine a microservice architecture, i.e. a system that compromises a variety of services. These services would need a way to communicate with each other. Message Queues are the way to do it.
The message queue carries and delivers the messages in an asynchronous way. Message Queues are also widely used in event-driven architectures, where certain operations are carried out after it receives an intimation from an external service. Message Queues are the way to carry the message to trigger these services. Since the service works after an event happens, it is called event-based architecture.
What is a Message Queue?
A message queue is a type of software system that enables the sending and receiving of messages between different applications. It provides a way to deliver messages to an application asynchronously, which means that it does not need to wait for a response before sending the next message.
Message Queues are used for communication between systems, applications, and services. They provide a messaging infrastructure that enables the asynchronous exchange of messages between systems, decoupling the sender from the receiver.
An asynchronous form of communication where one program or person sends a message to another program or person, but doesn't wait for an immediate response or acknowledgment.
Benefits of Message Queues
Better Decoupling: One of the most popular applications for message queues is this. Decoupling is the capacity to separate diverse system components so they are not dependent on one another. These two services can communicate with one another through message queues. The other services won't need to modify if service 1 changes.
Scalability: This is related to the above point. As a result of message queues' ability to decouple your system, you can now scale up or scale down individual services as needed on demand. For instance, you can grow Service 1 (horizontally or vertically) and have a message queue interact with Service 2.
To know more about scaling a system, checkout this blog: https://www.thegeekyminds.com/post/all-about-scaling-a-system-horizontal-scaling-vs-vertical-scaling-system-design
Increase Reliability: In the event of a system crash, message queues also have the option to store the messages in their memory. The messages would be kept in the queue. For instance, if the client that was supposed to receive the message broke down for any reason. The message queues can play the message once the client's machine is up, and the client can then process the message from the time since it was down.
Handle Traffic Spikes: Message queues are effective at handling traffic spikes. Without message queues, it's possible that your system might have broken because of traffic spikes. This would result in the loss of the messages. The usage of a message queue, however, allows your server to process messages at its own pace and eliminates the need to handle traffic surges on the server.
Publisher-Subscriber: Publisher-Subscriber model means when a service sends a message, it should be able to broadcast the message to more than 1 service. Some message queues, like Rabbit-MQ, provide a fan-out mechanism, where you can configure your message queue to behave like the publisher-subscriber model and send the same message across many servers at the same time.
Load balancing: Message Queues can distribute messages evenly among multiple receivers.
To know more about Publisher-Subscriber model, checkout this blog: https://www.thegeekyminds.com/post/publisher-subscriber-model-system-design-architecture
Asynchronous: Message Queues give users the choice of processing messages later. For instance, you can continue to send messages to a message queue and decide to handle them at a later time.
Ordering guarantees: An ordering guarantee is provided by the message queue. For instance, FIFO (First-in-First-Out). It indicates that the earlier-enqueued message will be delivered sooner.
Batch Processing: You also have the option to process messages batch-wise. You may, for instance, create a condition that processes 100 messages at once. This can have a number of advantages, such as the ability to bulk update the database rather than doing so individually for each of the 100 messages.
Now you may be wondering - "What are the scenarios where message queues are used?"
Some scenarios where message queues are used?
Message Queues are used in a variety of scenarios, some of which are:
Inter-system communication: Message Queues are used to facilitate inter-system communication between various systems, applications, and services. They give systems a means to communicate asynchronously without having to wait for a reply.
Event-driven architecture: The implementation of event-driven architecture patterns, in which systems respond to events by producing and consuming messages, uses message queues.
Distributed systems: Message queues are used to create distributed systems, where numerous systems coordinate their communications with one another.
Microservices architecture: Message Queues are used to promote communication between microservices, allowing them to collaborate to serve a broader requirement.
Background processing: Long-running tasks are processed via message queues so that the main application can keep processing requests while the background jobs are being completed.
Data integration: Message Queues are used to integrate different systems, allowing them to exchange data in a reliable and scalable manner.
Publish-subscribe pattern: Message Queues are used to implement the publish-subscribe pattern. Publishers send messages to a message queue, and subscribers receive messages from the queue.
These are only a handful of the numerous applications for which Message Queues are used for. They offer a flexible and scalable architecture for message exchange across systems, enabling businesses to create applications that are both highly available and robust.
And that's a wrap! Hi, I am Gourav Dhar, a software developer and I write blogs on Backend Development and System Design. Subscribe to my Newsletter and learn something new every week - https://thegeekyminds.com/subscribe