Assume you have an online store that integrates several systems, such as the Web-based front-end system, the credit card verification system, the retail system, and the shipping system i.e. an end to end business transaction system. The origin of the control flow is usually in the front end. For example, a customer placing an order has to send a request message to the credit card verification system. If the credit card information is validated, the online store sends request messages to the various retail systems, depending on the ordered items. An order for food translates into a purchase order message for the food retailer; an order for shoes translates into a purchase order message for the shoes retailer and so on.
The control flow could also originate from the retailers to the customer. For example, when a retailer updates a catalog, the retail system sends catalog update messages to the store so that the store can display the new items. Similarly, when a shipper changes pickup times, the shipping system sends update messages to all the retailers the system serves so that they can have the shipments ready in time.
OK fine, everything works fine right?, what exactly is the problem?
Have you wondered how the applications are integrated in the example above without enforcing a common interface and also allow each application to initiate interactions with several other applications? An interesting problem isn't it?, interesting and challenging because of some of the problems noted below.
- How to route messages to one or more of many destinations?
- How to transform messages to an alternative representation(format) ?
- How to perform message aggregation, decomposing messages into multiple messages and sending them to their destination, then recomposing the responses into one message to return to the user
- How to interact with an external repository to augment a message or store it?
- How to invoke Web services to retrieve data?
- How to Respond to events or errors?
- How to provide content and topic-based message routing using the publish/subscribe model?
- How to take care of applications in an integration solution that could have conflicting quality of service (QoS) requirements?
Message broker provides a medium for resolution of these issues.
What is AMQP?
AMQP is a standard wire-level protocol and semantic framework for high performance enterprise messaging. From the AMQP website: AMQP is an Open Standard for Messaging Middleware. By complying to the AMQP standard, middleware products written for different platforms and in different languages can send messages to one another. AMQP addresses the problem of transporting value-bearing messages across and between organizations in a timely manner.If you are interested in why AMQP check this.
What is the Open Telecom Platform (OTP)?
The Open Telecom Platform (OTP) is a battle-tested library of management, monitoring, and support code for constructing extremely high-performance, reliable, scalable, available distributed network applications. It is written in Erlang.
OK, lets connect the strings and see what and why RabbitMQ
RabbitMQ is an open source message broker software, using the standard AMQP protocol. The RabbitMQ server is written in Erlang and is built on the OTP framework for clustering and failover. The source code is released under the Mozilla Public License.
RabbitMQ offers a reliable, highly available, scalable and portable messaging system with predictable and consistent throughput and latency.
RabbitMQ is 100% open source and 100% based on open standard protocols freeing users from dependency on proprietary vendor-supplied libraries.
RabbitMQ is designed with interoperability capability with other messaging systems: it uses the leading AMQP protocol, the open standard for business messaging, and, through adapters, supports SMTP, STOMP and HTTP for lightweight web messaging.
RabbitMQ is supported by a thriving community of active contributors. A full range of commercial support services are available through the SpringSource division of VMware. Do check here for more details. Also here is the FAQ for RabbitMQ.