README.md
1# RabbitMQ JMS Topic Exchange Plugin
2
3## Overview
4
5This plugin adds server-side support for [RabbitMQ JMS client](https://github.com/rabbitmq/rabbitmq-jms-client).
6This plugin provides support for JMS topic routing and selection based on JMS SQL selection
7rules.
8
9This implementation is based upon the [Java Messaging Service
10Specification Version 1.1](https://www.oracle.com/technetwork/java/docs-136352.html).
11
12## Project Maturity
13
14RabbitMQ JMS-related projects are several years old and can be considered
15reasonably mature. They have been first open sourced in June 2016.
16Some related projects (e.g. a compliance test suite) and documentation are yet to be open sourced.
17
18## Supported RabbitMQ Versions
19
20This plugin targets RabbitMQ `3.6.0` and later versions.
21
22## Installation
23
24This plugin ships with RabbitMQ starting with `3.6.3`. Enable it with
25
26```
27[sudo] rabbitmq-plugins enable rabbitmq_jms_topic_exchange
28```
29
30
31## Design
32
33The plugin this generates is a user-written exchange type for RabbitMQ
34client use. The exchange type name is "`x_jms_topic`" but this is _not_
35a topic exchange. Instead it works together with a standard topic
36exchange to provide the JMS topic selection function.
37
38When JMS Selectors are used on a Topic Destination consumer, the
39destination (queue) is bound to an exchange of type `x_jms_topic`, with
40arguments that indicate what the selection criteria are. The
41`x_jms_topic` exchange is, in turn, bound to the standard Topic Exchange
42used by JMS messaging (this uses the RabbitMQ exchange-to-exchange
43binding extension to the AMQP 0-9-1 protocol).
44
45In this way, normal topic routing can occur, with the overhead of
46selection only applying when selection is used, and _after_ the routing
47and filtering implied by the topic name.
48
49## Building From Source
50
51Building is no different from [building other RabbitMQ plugins](https://www.rabbitmq.com/plugin-development.html).
52
53TL;DR:
54
55 git clone https://github.com/rabbitmq/rabbitmq-jms-topic-exchange.git
56 cd rabbitmq-jms-topic-exchange
57 make -j dist
58 ls plugins/*
59
60## Copyright and License
61
62(c) 2007-2020 VMware, Inc. or its affiliates.
63
64See [LICENSE](./LICENSE) for license information.
65