为了在 Java EE 或 Jakarta EE 环境中使用 Apache ActiveMQ Artemis,您可以使用 JCA 资源适配器。

基于 JCA 的 JMS 连接工厂与普通的 JMS 连接工厂相比有 2 个主要优势

  • 池化 - 一般来说,当从基于 JCA 的 JMS 连接工厂“创建”连接时,底层物理连接将从池中取出,而当连接“关闭”时,底层物理连接将返回到池中。这消除了实际创建和销毁物理连接带来的性能损耗,允许客户端以通常被认为是反模式的方式编写(例如,为每个发送的消息“创建”和“关闭”连接)。

  • 自动加入 JTA 事务 - 在大多数情况下,在 Java/Jakarta EE 上下文中使用 JMS 消息的应用程序通过 MDB 来实现。默认情况下,MDB 中的消息消费(即 onMessage 的执行)发生在 JTA 事务中。如果在 MDB 处理过程中使用基于 JCA 的 JMS 连接工厂(例如,发送消息),那么 JCA 逻辑将自动将会话加入 JTA 事务,以便消息消费和消息发送成为原子操作(假设基于 JCA 的连接工厂支持 XA)。这对于涉及其他事务性资源的操作也是如此(例如,数据库)。

1. 版本

根据您的环境选择合适的资源适配器版本。

artemis-ra-rar

Java EE

JCA

JMS

8

1.7

2.0

artemis-jakarta-ra-rar

Jakarta EE

JCA

JMS

>= 9

2.0

3.0

2. 构建 RA

要使用 RA,您需要构建它。最简单的方法是使用 示例

cd examples/features/sub-modules/{artemis-jakarta-ra-rar,artemis-ra-rar}
mvn clean install
cd target
mv artemis*.rar artemis.rar

按照您的应用服务器手册安装 artemis.rar JCA RA 档案。

3. 配置

配置分为两个部分。首先是将消息发送到目标(出站)的配置,其次是获取从目标消费的消息(入站)的配置。每个部分都可以单独配置,也可以同时使用资源适配器的设置。

这里列出了一些选项。如果您想全面了解所有配置选项,请参考 https://github.com/apache/activemq-artemis/blob/{{ config.version }}/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ConnectionFactoryProperties.java[ConnectionFactoryProperties] 作为基础,并另外参考您对象所使用的特定类。

还可以参考 artemis.rar 中的 rar.xml 文件了解选项和说明。您可以在其中设置资源适配器的默认选项。在您的应用服务器中配置资源适配器时,您将覆盖 rar.xml 的默认值。在配置连接工厂或激活规范时,您可以覆盖资源适配器的配置。

3.1. 资源适配器

配置选项 https://github.com/apache/activemq-artemis/blob/{{ config.version }}/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAProperties.java[ActiveMQRAProperties]

connectionParameters

键值对,例如 host=localhost;port=61616,host=anotherHost;port=61617

userName

userName

password

password

clientID

clientID

3.2. 连接工厂

出站 ManagedConnectionFactory 的配置选项:https://github.com/apache/activemq-artemis/blob/{{ config.version }}/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/ActiveMQRAMCFProperties.java[ActiveMQRAMCFProperties] ManagedConnectionFactory 的连接由 RA 指定。

入站 ConnectionFactory 的配置选项 https://github.com/apache/activemq-artemis/blob/{{ config.version }}/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java[ActiveMQConnectionFactory]

brokerUrl

到代理的 URL

cacheDestinations

由 JMS 会话进行缓存

3.2.1. 连接管理器

您无法配置任何属性。

3.3. 激活规范

配置选项 https://github.com/apache/activemq-artemis/blob/{{ config.version }}/artemis-ra/src/main/java/org/apache/activemq/artemis/ra/inflow/ActiveMQActivationSpec.java[ActiveMQActivationSpec]

在激活规范中,您可以配置从 ActiveMQ Artemis 消费消息所需的所有内容。

useJndi

如果要通过 JNDI 查找目标,则为 true。

connectionFactoryLookup

此激活规范使用的连接工厂的 JNDI 名称。您可以引用现有的 ManagedConnectionFactory 或指定另一个。

jndiParams

用于 InitialContext。键值对,例如 a=b;c=d;e=f

destination

JMS 目标的名称或 JNDI 引用

destinationType

[javax|jakarta].jms.Queue[javax|jakarta].jms.Topic

messageSelector

用于过滤消息到您的 MDB 的 JMS 选择器

maxSession

用于从代理并行消费消息

3.3.1. 仅适用于主题消息消费

subscriptionDurability

持久/非持久

subscriptionName

如果您使用持久订阅,Artemis 会保存所有具有此名称的消息

4. 日志记录

使用 org.apache.activemq.artemis.ra 包可以捕获所有资源适配器日志语句。