为了在 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
包可以捕获所有资源适配器日志语句。