An intermediary program that translates a system’s language from one internationally suitable language to another via a telecommunication medium is termed as Message Broker. It is primarily used for message validation, transformation and routing. A message broker is also known as middleware or integration broker. There are three types of message brokers – point-to-point, publish-subscribe, and a hybrid of both. The purpose of a broker is to –
- Route or transfer messages to one or more destinations with an alternative representation.
- Perform message aggregation, and to decompose them to multiple messages
- Sending messages to their destination
- Recomposing the responses into one message
- Respond to the messages received / errors
- Communicate with external repository to augment a message
Message brokers can impact a customer’s backlog of messages, and data performance. That’s why it’s crucial to understand the types of problems that messaging systems address.
RabbitMQ is the most widely deployed open source message broker. Often termed as message-oriented middleware, this open source software was originally implemented in AMQP (Advanced Message Queuing Protocol) for message orientation, queuing, routing, reliability and security. Later RabbitMQ was extended with a plug-in architecture to support MQTT (Message Queuing Telemetry Transport), STOMP (Streaming Text Oriented Messaging Protocol) and other protocols.
RabbitMQ Features –
1) Asynchronous Messaging – RabbitMQ can support multiple messaging protocols.
2) Developer Experience – Develop cross-language messaging with languages like PHP, Python, .NET, Java etc.
3) Distributed Deployment – Deploy as clusters or collection of nodes for high availability and throughput.
4) Tools & Plugins – Consists diverse array of tools and plugins which supports continuous integration, operational metrics, and integration etc.
Originally designed by LinkedIn, it is now under the Apache project umbrella. This open-source stream processing platform is written in Scala and Java. Apache Kafka is designed for high volume publish-subscribe messages and streams for a fast, durable, and scalable transmission.
As LinkedIn was indulging more into distributed architecture, it needed to refine features like real time stream processing and data integration. Kafka is particularly useful in event driven architecture and is well adopted today within the Apache Software Foundation ecosystem of products. Become a Apache Kafka Pro with SpringPeople.
This open source message broker is written in Java and Java Message Service (JMS) client. It consists of Enterprise Features fostering the communication from more than one client or server. Along with other “cross language” clients, it also supports Java via JMS 1.1. Apache ActiveMQ Artemis has a proven non blocking architecture. Features like computer clustering and using any databases as a JMS persistence provider virtual memory, journal persistency, and cache manages the communication in ActiveMQ.
ActiveMQ is currently in major version 5, minor version 15. There’s also separate product called Apache ActiveMQ Artemis which is a complete rewrite of ActiveMQ 5, incorporating the donation of the HornetQ code base from Red Hat, and bringing the broker’s JMS implementation up to the 2.0 specification. ActiveMQ is used in enterprise service bus implementations such as Apache ServiceMix and Mule. Other projects using ActiveMQ include Apache Camel and Apache CXF in SOA infrastructure projects.
Kestrel is more like Kafka than the other two message brokers mentioned here. The Kestrel message broker is written in scala and speaks the memcached protocol. The queue name comes from the key and the object is the message. Although Kestrel is particularly simple, the queues are in a configuration file, but Kestrel allows you to specify storage limits per queue and expiration and behaviour when the limits are reached.
Kestrel is more like the simple Blaine Cook’s “starling” with added features. Kestrel is very fast and runs on the JVM so it can take advantage of the hard work people have put into java performance.