decorative image for blog on activemq and rabbitmq
November 25, 2020

ActiveMQ vs RabbitMQ

Middleware
Open Source

Finding the right open source message broker is critical to efficiently solving messaging issues in a variety of application types. Today we're looking at two open source message brokers commonly used to solve those issues, ActiveMQ and RabbitMQ.

In this blog, we'll start with an overview of message brokers, then dive in on a comparison of ActiveMQ vs. RabbitMQ in terms of features, performance, and enterprise readiness.

What Is a Message Broker?

Message brokers help take a sender application’s messages and deliver them to a receiver application.

Message brokers can often also route, translate message formats and protocols to help connect applications that may have different requirements. They are a building block of message-oriented middleware for a complete messaging solution.

ActiveMQ and RabbitMQ

ActiveMQ and RabbitMQ are both open source, high performance, and reliable message brokers used and deployed widely in production environments. They use the underlying telecommunication system by helping the computer to interact with each other by sharing the defined message contents with various applications. Both ActiveMQ and RabbitMQ are used widely in all types of applications and machine(s) business and telecom data communication.

The latest versions of ActiveMQ (5.16.0, released June 1, 2020) and RabbitMQ (3.8.9, released 1st October 1, 2019) are both popular open-source message broker applications. RabbitMQ is the original implementation of the AMQP protocol, and is based on an architecture where the messages are queued on the central nodes before sending them to the destination. ActiveMQ, in comparison, is configurable to allow different broker network architectures to be designed based on messaging, performance, and high availability needs.

See How OS Message-Oriented Middleware Can Solve Problems in Enterprise Applications

This white paper looks at two in-depth case studies on system federation, and streaming data – and how open source message-oriented middleware can solve them.

Get Free White Paper

Comparing ActiveMQ vs. RabbitMQ Head to Head

As we outline in the table below, ActiveMQ and RabbitMQ have a number of key differences.

ActiveMQ vs. RabbitMQ Categorical Comparison

Category

ActiveMQ

RabbitMQ

Programming Language

Wholly written in Java.

Modules written on Erlang or OTP language.

Working Principle

ActiveMQ is used in enterprise projects to store multiple instances and supports clustering environments based on the JMS messaging specification.

RabbitMQ is a message broker which is executed in low-level AMQP protocol and acts as an intermediator between two application in the communication process.

Source Code is Open

Yes, open source by the Apache foundation.

Yes, RabbitMQ uses the Mozilla license.

Support for Multiple Languages

ActiveMQ supports Java, C, C#, Haxe, Node.js, Perl, Racket, Python, and Ruby on Rails.

RabbitMQ supports multiple languages such as Java, Ruby, Python, PHP, Perl Rust, Go, JavaScript, C and C++.

Applied Protocols

ActiveMQ supports OpenWire, STOMP, AMQP, MQTT, and HTTP web service protocols, and supports SSL for encryption.

RabbitMQ supports AMQP, MQTT, STOMP, HTTP and WebSockets  protocols.

Number of Brokers

ActiveMQ can scale from single to complex, multi-broker architectures

RabbitMQ only requires one broker.

Need for Administration

ActiveMQ is based on Web Console which is a web-based administration tool. External CLI available.

RabbitMQ requires administration tool support. Has native CLI support.

Tools used

ActiveMQ is a multi-protocol supported message broker.

RabbitMQ HTTP-works on the management plugin.

Available Training Programs

OpenLogic offers expert-led, on-demand ActiveMQ training.

VMWare offers training.

Methods of synchronization

ActiveMQ is configured with the synchronous method but it can be modified into asynchronous by modifying the setting panel.

RabbitMQ works on both synchronous and asynchronous methods.

Message patterns

ActiveMQ message patterns include PUB-SUB and message queue.

RabbitMQ general message patterns include, Message Queue, PUB-SUB and RPC and Routing.

Future directions

The development of ActiveMQ and ActiveMQ Artemis is outlined on the Apache website.

The update details can be checked in RabbitMQ’s changelog and developers make constant updates fixing the bugs and enhanced performance.

Cross-Platform

Yes, it is applicable.

Yes, it is possible.

Cost

It is freely available.

It is freely available.

In terms of which of these differences are most important for teams to consider before using one over the other, the ten category comparisons below are among the most important.

1. Clients and Protocols

Apache ActiveMQ is fast, supports many cross-language Clients and Protocols, comes with easy to use Enterprise Integration Patterns and many advanced features. ActiveMQ also fully supports JMS 1.1 and J2EE 1.4. Apache ActiveMQ is released under the Apache 2.0, whereas RabbitMQ is implemented on Advanced Message Queueing Protocol v1.0 and written in Erlang v20/OTP.

2. Licensing

ActiveMQ is developed by Apache Software Foundation while RabbitMQ is developed by Pivotal owned by Dell. ActiveMQ holds an Apache License 2.0, while RabbitMQ holds a Mozilla Public License.

3. Scalability

RabbitMQ works based on the center/hub-spoke which makes this a unique approach. RabbitMQ is very portable and user-friendly. This is because the major actions, such as load balancing or persistent message queuing, run only on a limited line of code. This approach, unfortunately, is slower and less scalable because of the added latency  from the central node, and size of the message envelope.

In comparison, ActiveMQ is easier to implement and provides advanced features like clustering, caching, logging, and message storage.

4. Deployment

RabbitMQ is embedded in applications and acts as a midway service. It differentiates itself to support encryption, storing data in the disk as pre-planned in case of an outage, making of clusters, duplication of services, to have high reliability. It is deployed on the OTP platform that assures maximum scalability and stability of the queue that acts as a key node of the entire system. It's non-trivial to implement RabbitMQ as a cluster.

For asynchronous messaging, RabbitMQ supports data integrations between multiple applications, and allows us to elegantly fan-out data to a variable number of subscribers, with almost zero effort.

5. Client/Server Support

ActiveMQ is comprised of a Java Message Service client which supports multiple clients or servers. The attributes, like computer clustering, support ActiveMQ to manage the communication system.

The current versions of ActiveMQ are ActiveMQ Artemis and ActiveMQ 5 Classic.

RabbitMQ is implemented to design the Advanced Message Queuing Protocol. It is stretched out to support different protocols such as MQTT and STOMP. Some of the features of RabbitMQ include rapid synchronous messaging, advanced tools and plugin, distributed deployment, developer-friendly, and centralized management.

6. Architectural Approaches

ActiveMQ 5 Classic is implemented with Java Message Service 1.1 with a pluggable architecture. Here there is a separate network of brokers allotted for distribution load.

ActiveMQ Artemis gives an amazing performance and deployed in non-blocking architecture for event flow of messaging applications with 1.1 and 2.0 of JMS. It has an adaptable clustering for distributing the load. It is a powerful addressing method that provides easy migration.

7. Documentation

ActiveMQ could be improved by providing better documentation. For reference, IBM MQ has 30 years of experience to build upon and has had 30 years to grow and improve. ActiveMQ does not have that level  of heritage provenance. Comparing the two, we find that IBM documentation is better, but it has had a lot more investment behind it.

8. Integrability

RabbitMQ has many advantages that support multiple messaging protocols, delivery acknowledgment, and message queue. It is enabled with various languages such as Python, .NET, and Java. It can also be used with applications such as Chef, Docker, and Puppet. It gives high throughput and availability by developing clusters. It can support public and private cloud with pluggable authentication and authorization. The HTTP-API is a command-line tool and its user interface is helpful in managing and monitoring the RabbitMQ broker.

9. Efficiency

ActiveMQ has multiple advantages that can be applied to have high efficiency according to the requirement. RabbitMQ supports C, C++, .NET and Python which is possible to embed multi-platform application by Advanced Message Queuing Protocol. It has the flexibility to exchange messages between web applications by STOMP that is Streaming Text Oriented Messaging Protocol. It also programmed to manage IoT devices.

10. Performance

Both Message Broker applications provide several configuration options for performance tuning in high throughput production scenarios. Just as an example in RabbitMQ below to use minimum busy waiting:

RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="+sbwt very_short +sbwtdcpu very_short +sbwtdio very_short"

 

There are also specific binding strategies in RabbitMQ that are used to help tune performance. ActiveMQ allows to trade off messaging speed for high availability by tuning durability & persistence guarantees depending on the message workload. For larger deployments it is possible to horizontally scale across multiple brokers for increased messaging volumes or vertically scale to handle large numbers of clients or multiple sites.

Which Is Better for Enterprise Applications?

RabbitMQ excels in single broker implementation (fast & quickest) and is typically used for simple scenarios. It has a plugin architecture that allow for complex architectures.

ActiveMQ trades a small amount of speed to natively support complex multi-broker network architectures and clients using a large variety of protocols. It comes bundled with Camel (that can be run in-broker or standalone) to support a vast number of enterprise integration patterns.

Final Thoughts

Both ActiveMQ and RabbitMQ are highly performant and reliable messaging solutions with slightly different philosophies and strengths. However, it is important to understand their unique abilities before using them in production environments.

RabbitMQ is ideal for lean and reliable erlang based deployment and excels for AMQP protocol clients.

ActiveMQ excels at complex enterprise integrations and is JMS based, also integrating with a wide variety of systems through its extensive native protocol support and allowing additional integrations through Camel when necessary. ActiveMQ works well in single broker scenarios but also supports a wide variety of more complex architectures as needed.

Get Training, Guidance, and Support for Your Message-Oriented Middleware

Regardless of which open source message-oriented middleware you choose, OpenLogic can deliver the training, guidance, and support your team needs. Learn about OpenLogic's ActiveMQ support and beyond. 

GET GUIDANCE AND SUPPORT  GET ON-DEMAND TRAINING

Additional Resources

For those who want to learn more about ActiveMQ, RabbitMQ, or open source messaging solutions in general, the links below are worth a look.