About Pivotal RabbitMQ

Pivotal RabbitMQ is a protocol-based messaging solution designed for cloud computing and modern, widely distributed web applications. It is the de facto standard for cloud messaging and the leading implementer of Advanced Message Queuing Protocol (AMQP), an open-standards alternative to costly, proprietary commercial messaging technologies.

Main Components

Pivotal RabbitMQ consists of a server (including plug-ins) and client libraries that implement AMQP.

Pivotal RabbitMQ Server

The RabbitMQ server is an implementation of an AMQP broker. It is written on the widely-used Erlang/Open Telecom Platform (OTP), an “always availableā€Ÿ platform that has been in production use in carrier grade telcos since the late 1990s. The core server is unusually compact, with only 12,000 lines of code. Because RabbitMQ implements the open AMQP protocol, it is not necessary to know Erlang, and many users prefer to manage the broker using Java or Ruby. For details about Pivotal RabbitMQ server usage and functionality, see Server Documentation. For AMQP information, see Protocol Documentation..

Pivotal RabbitMQ Plug-ins

Pivotal RabbitMQ server is shipped with the following plug-ins. You enable, disable, and display them with the rabbitmq-plugins tool. See Plugins.

  • amqp_client
  • cowboy
  • eldap
  • mochiweb
  • rabbitmq_amqp1_0
  • rabbitmq_auth_backend_ldap
  • rabbitmq_auth_mechanism_ssl
  • rabbitmq_consistent_hash_exchange
  • rabbitmq_federation
  • rabbitmq_federation_management
  • rabbitmq_jms_topic_exchange
  • rabbitmq_management
  • rabbitmq_management_agent
  • rabbitmq_management_visualiser
  • rabbitmq_mqtt
  • rabbitmq_shovel
  • rabbitmq_shovel_management
  • rabbitmq_stomp
  • rabbitmq_test
  • rabbitmq_tracing
  • rabbitmq_web_dispatch
  • rabbitmq_web_stomp
  • rabbitmq_web_stomp_examples
  • sockjs
  • webmachine

Pivotal RabbitMQ Client Libraries

Pivotal RabbitMQ provides and commercially supports .NET and Java client libraries. The Erlang AMQP client is also available to all AMQP-compliant brokers, which includes RabbitMQ server.

The RabbitMQ .NET client is an implementation of an AMQP client library for C# (and, implicitly, other .NET languages), and a binding that exposes AMQP services through Microsoft’s Windows Communication Foundation (WCF). The library is open-source, and is dual-licensed under the Apache License v2 and the Mozilla Public License v1.1. For details about .NET client usage and functionality, under Client Documentation, see ”.NET Client Library User Guide" and “.NET Client API Documentation.”

The RabbitMQ Java client library allows Java code to interface to AMQP servers. The library is platform neutral; the binary distributions differ only in the version of Java they are intended for use with. The library is open-source, and is dual-licensed under the Mozilla Public License v1.1 and the GNU General Public License, v2. For details about Java client usage and functionality, under Client Documentation, see Java Client API Guide and “Javadoc Documentation.”

JMS Client for Pivotal RabbitMQ is an add-on library for this version of Pivotal RabbitMQ. It allows applications written for the JMS 1.1 API to use Pivotal RabbitMQ messaging. The JMS Client for Pivotal RabbitMQ implements the JMS API on top of the RabbitMQ Java client API, so that new and existing JMS applications can connect with RabbitMQ brokers. See Using JMS Client for Pivotal RabbitMQ.

What You Can Do with Pivotal RabbitMQ

The following sections highlight typical use cases and describe how Pivotal RabbitMQ is optimized for modern messaging.

Main Features

Pivotal RabbitMQ lets you implement a range of message patterns across many platforms and protocols.

  • Reliability . Pivotal RabbitMQ offers a variety of features to let you trade off performance with reliability, including persistence, delivery acknowledgements, publisher confirms, and high availability.
  • Flexible routing . Messages are routed through exchanges before arriving at queues. Pivotal RabbitMQ features several built-in exchange types for typical routing logic. For more complex routing you can bind exchanges together or even write your own exchange type as a plugin.
  • Clustering . Several Pivotal RabbitMQ servers on a local network can be clustered to form a single logical broker.
  • Federation . Federation offers an alternative distributed messaging model for servers that need to be more loosely and unreliably connected than clustering allows.
  • Highly Available Queues . You can mirror queues across several machines in a cluster, ensuring that even in the event of hardware failure your messages are safe.
  • Multi-protocol . Pivotal RabbitMQ supports messaging over a variety of messaging protocols.
  • Many Clients . There are Pivotal RabbitMQ clients for almost any language you can think of.
  • Management UI . Pivotal RabbitMQ ships with an easy-to use management user interface that allows you to monitor and control every aspect of your message broker.
  • Tracing . If your messaging system is not working properly, you can use the tracing support to find out what’s going wrong.
  • Plugin system . Pivotal RabbitMQ ships with a variety of plugins, extending it in different ways, and you can also write your own.
  • Commercial support. Commercial support, training, and consulting are available from Pivotal.
  • Large Community . There is a large community around open-source RabbitMQ, producing many clients, plugins, guides, and so on. Join the mailing list to get involved.

How Pivotal RabbitMQ Is Engineered for Modern Messaging

Messaging is critical to widely distributed, cloud-based applications that leverage pools of shared infrastructure. Modern web applications use messaging both within their own application components and to connect to other services.

This approach requires messaging software that is lightweight enough to embed throughout an application; easily adoptable by many developers across many teams; and flexible enough to integrate heterogeneous application components and systems. Pivotal RabbitMQ leverages the advantages and requirements of modern messaging by implementing:

  • A small disk and memory footprint.
  • An easily understood API with drivers available for multiple languages.
  • Support on all major operating systems and developer platforms.
  • A protocol-based approach that let you integrate clients built in Java, .NET, Python, PHP, Ruby, and other languages, or which are implemented as web services.
  • AMQP, the industry standard protocol for business messaging.

About AMQP

AMQP has widespread industry backing, especially among financial services and large-scale web application providers. It is a complete solution for all categories of messaging, from publish/subscribe and content-based routing to reliable and transactional transfer of large data sets.

Unlike JMS, AMQP is a binary wire protocol that enables testable interoperability across any language and platform. This capability translates into lower integration costs because, like TCP or HTTP, messaging becomes a simple matter of wiring. AMQP is a modern design, more like a switching exchange than like a database, and is not affected by technology decisions made in the 1990s.

To learn how Pivotal RabbitMQ implements and extends AMQP, see Compatibility and Conformance and Protocol Extensions.

Protocols Supported by Pivotal RabbitMQ

Pivotal RabbitMQ supports the following messaging protocols, either directly or through the use of plugins:

  • AMQP 0-9-1, 0-9 and 0-8, and extensions: RabbitMQ was originally developed to support AMQP and is thus the “core” protocol supported by the broker. All of these variants are fairly similar to each other, with later versions tidying up unclear or unhelpful parts of earlier versions. RabbitMQ has extended AMQP 0-9-1 in various ways.

    AMQP 0-9-1 is a binary protocol, and defines quite strong messaging semantics. For clients it’s a reasonably easy protocol to implement, and there are a large number of implementations available for many different programming languages and environments.

    It is recommended that you use AMQP 0-9-1.

  • STOMP: STOMP is a text-based messaging protocol emphasising (protocol) simplicity. It defines little in the way of messaging semantics, but is easy to implement and very easy to implement partially (it’s the only protocol that can be used by hand over telnet).

    RabbitMQ supports STOMP (all current versions) via a plugin.

  • MQTT: MQTT is a binary protocol emphasising lightweight publish/subscribe messaging, targeted to clients in constrained devices. It has well defined messaging semantics for publish/subscribe, but not for other messaging idioms.

    RabbitMQ supports MQTT 3.1 via a plugin.

  • AMQP 1.0: Despite the name, AMQP 1.0 is a radically different protocol from AMQP 0-9-1 / 0-9 / 0-8, sharing essentially nothing at the wire level. AMQP 1.0 imposes far fewer semantic requirements; it is therefore easier to add support for AMQP 1.0 to existing brokers. The protocol is substantially more complex than AMQP 0-9-1, and there are fewer client implementations.

    RabbitMQ supports AMQP 1.0 via a plugin.

  • HTTP: HTTP is not a messaging protocol. However, RabbitMQ can transmit messages over HTTP in three ways:

    • The management plugin supports a simple HTTP API to send and receive messages. This is primarily intended for diagnostic purposes but can be used for low volume messaging without reliable delivery.
    • The Web-STOMP plugin supports STOMP messaging to the browser, using WebSockets or one of the fallback mechanisms supported by SockJS.
    • The JSON-RPC channel plugin supports AMQP 0-9-1 messaging over JSON-RPC to the browser. Note that because JSON RPC is a synchronous protocol, some parts of AMQP that depend on asynchronous delivery to the client are emulated by polling.