Queueing systems are an excellent way to communicate between applications in a loosely coupled and robust way, they are key within many integration patterns commonly found in distributed systems. This helps you separate the concerns of a system and is capable of running on entirely separate hardware whilst still being a part of that system.
Queueing requests before they reach a service provides a mechanism for asynchronous message passing and often allows for more requests to be accepted. This kind of message passing is a core concept in many best practices and features in modern software movements such as The Reactive Manifesto (http://www.reactivemanifesto.org).
In a simple system the queue can act as a buffer in front of a service and a way of regulating the flow of input into a service. In a more complex system it may also be a way to assign certain requests to consumers based on specified criteria. In the case of global systems, a common use would be to route requests to services based on their physical location in order to reduce latency experienced by the customer.
Here at Esendex we have tested, considered and used many different messaging technologies and have arrived at RabbitMQ to enable greater separation within our messaging system. RabbitMQ is a popular open source messaging system developed by Pivotal, it is an implementation of the open standard for messaging middleware, AMQP (Advanced Message Queuing Protocol).
Reliability is one of the most critical challenges that we face at Esendex and our customers also have high expectations of the responsiveness of our reporting and so high availability and performance of our queuing implementations is critical. RabbitMQ offers many features that provide us with a highly robust system that is superior to its competitors.
In the rest of this series of posts we will explore queuing and the features of RabbitMQ that Esendex find most useful.
To find out more about RabbitMQ see their website and development blog.