[Why] Once `khepr_db` is enabled by default, we need another way to disable it to select Mnesia instead. [How] We use the new relative forced feature flags mechanism to indicate if we want to explicitly enable or disable `khepri_db`. This way, we don't touch other stable feature flags and only mess with Khepri. However, this mechanism is not supported by RabbitMQ 4.0.x and older. They will ignore the setting. Therefore, to make this work in mixed-version testing, we set the `$RABBITMQ_FEATURE_FLAGS` variable for the secondary umbrella. This part will go away once we test against RabbitMQ 4.1.x as the secondary umbrella in the future. At the end, we compare the effective metadata store to the expected one. If they don't match, we skip the test. While here, change `rjms_topic_selector_SUITE` to only choose Khepri without specifying any feature flags. |
||
---|---|---|
.. | ||
include | ||
src | ||
test | ||
BUILD.bazel | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
LICENSE | ||
LICENSE-MPL-RabbitMQ | ||
Makefile | ||
README.md | ||
app.bzl |
README.md
RabbitMQ JMS Topic Exchange Plugin
Overview
This plugin adds server-side support for RabbitMQ JMS client. This plugin provides support for JMS topic routing and selection based on JMS SQL selection rules.
This implementation is based upon the Java Messaging Service Specification Version 1.1.
Project Maturity
RabbitMQ JMS-related projects are several years old and can be considered reasonably mature. They have been first open sourced in June 2016. Some related projects (e.g. a compliance test suite) and documentation are yet to be open sourced.
Supported RabbitMQ Versions
This plugin ships with RabbitMQ.
Installation
Like all other plugins, this plugin must be enabled before it can be used. Enable it with
[sudo] rabbitmq-plugins enable rabbitmq_jms_topic_exchange
Design
The plugin this generates is a user-written exchange type for RabbitMQ
client use. The exchange type name is "x-jms-topic
" but this is not
a topic exchange. Instead it works together with a standard topic
exchange to provide the JMS topic selection function.
When JMS Selectors are used on a Topic Destination consumer, the
destination (queue) is bound to an exchange of type x-jms-topic
, with
arguments that indicate what the selection criteria are. The
x-jms-topic
exchange is, in turn, bound to the standard Topic Exchange
used by JMS messaging (this uses the RabbitMQ exchange-to-exchange
binding extension to the AMQP 0-9-1 protocol).
In this way, normal topic routing can occur, with the overhead of selection only applying when selection is used, and after the routing and filtering implied by the topic name.
Copyright and License
(c) 2007-2023 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
See LICENSE for license information.