About JMS Client for Pivotal RabbitMQ

JMS Client for Pivotal RabbitMQ is a client library for Pivotal RabbitMQ. Pivotal RabbitMQ is not a JMS provider but has features needed to support the JMS Queue and Topic messaging models. JMS Client for RabbitMQ implements the JMS 1.1 specification on top of the RabbitMQ Java client API, thus allowing new and existing JMS applications to connect with RabbitMQ brokers through Advanced Message Queueing Protocol (AMQP).

Components of JMS Client for Pivotal RabbitMQ

The JMS Client for Pivotal RabbitMQ distribution archive file contains the following components:

  • JMS Client for RabbitMQ library and its dependent libraries.

    rabbitmq-jms-version.jar is the JMS Client for RabbitMQ. The dependent libraries are in the dependencies directory. They are amqp-client-version.jar, which is the RabbitMQ Java client library, and geronimo-jms_1.1_spec-version.jar, which contains the JMS 1.1 interfaces that JMS Client for RabbitMQ implements.

  • RabbitMQ JMS topic selector plugin, plugin/rjms-topic-selector-version.ez.

    To support message selectors for JMS topics, the RabbitMQ Topic Selector plugin must be installed on the RabbitMQ server. Message selectors allow a JMS application to filter messages using an expression based on SQL syntax. Message selectors for Queues are not currently supported.

Because the RabbitMQ Java client library is included in the JMS Client for RabbitMQ distribution, you do not have to download and install the Pivotal RabbitMQ Java Client.


JMS is the standard messaging service for the Java Extended Edition (JEE) platform. It is available in commercial and open source implementations. Each implementation includes a JMS provider, a JMS client library, and additional, implementation-specific components for administering the messaging system. The JMS provider can be a standalone implementation of the messaging service, or a bridge to a non-JMS messaging system.

The JMS client API is standardized, so JMS applications are portable between vendors’ implementations. However, the underlying messaging implementation is unspecified, so there is no interoperability between JMS implementations. Java applications that want to share messaging must all use the same JMS implementation unless bridging technology exists. Furthermore, non-Java applications cannot access JMS without a vendor-specific JMS client library to enable interoperability.

AMQP is a messaging protocol, rather than an API like JMS. Any client that implements the protocol can access any AMQP broker. Protocol-level interoperability allows AMQP clients written in any programming language and running on any operating system to participate in the messaging system with no need to bridge incompatible vendor implementations.

Because JMS Client for RabbitMQ is implemented using the RabbitMQ Java client, it is compliant with both the JMS API and the AMQP protocol.

You can download the JMS 1.1 specification and API documentation from the Oracle Technology Network Web site.


Some JMS features are unsupported in this JMS Client for RabbitMQ release:

  • The JMS Client for RabbitMQ does not support server sessions.
  • XA transaction support interfaces are not implemented.
  • Topic selectors are supported with the RabbitMQ JMS topic selector plugin. Queue selectors are not yet implemented.
  • SSL and socket options for RabbitMQ connections are supported, but only using the (default) SSL connection protocols that the RabbitMQ client provides.
  • The JMS NoLocal subscription feature, which prevents delivery of messages published from a subscriber’s own connection, is not supported with RabbitMQ. You can call a method that includes the NoLocal argument, but it is ignored.

See Pivotal RabbitMQ Implementation of JMS API for a detailed list of supported JMS APIs.