JMS v2.0
ActiveMQ Classic 5.x 对 JMS v3.1 和 v2.0 的支持正在进行中。
过渡方法
最初,ActiveMQ Classic 客户端将不支持所有 JMS 2.0 功能,并将为不支持的方法和功能抛出 UnsupportedOperationException
(RuntimeException
),例如使用 CompletionListener
进行异步发送、发送具有延迟交付的消息以及使用共享主题使用者。
随着功能在后续版本中实现,这些异常将被完全功能的方法、示例和单元测试所取代。有关实现进度的更多详细信息,请参见下文/下面。
Jakarta Messaging 3.1 支持
对 JMS 2.0 的支持也使构建此功能成为可能,从而可以过渡到 Jakarta Messaging 3.1 及其新的 jakarta.jms
API 命名空间,而不是历史上的 javax.jms
命名空间。
- Java 企业功能的未来标准
- Spring 6 所需
- Jakarta EE 9+10 所需。
- 仅更改 JMS API Java 包名称
- ActiveMQ Classic 包名称不会改变
这允许仅通过更新依赖项来进行过渡,而无需在未来重新编码!
客户端 jar | API 包 | 版本 | 注释 |
---|---|---|---|
activemq-client | jakarta.jms | 6.0.x | Jakarta Messaging 3.1 支持。适用于嵌入式代理和 VM 传输。 |
activemq-client | javax.jms | 5.18.x | JMS 2.0 支持。适用于嵌入式代理和 VM 传输。 |
activemq-client-jakarta | jakarta.jms | 5.18.1+ | 用于初始 *仅客户端* Jakarta Messaging 3.1 支持的过渡模块。不能与使用 javax.jms API 的 activemq-client 或代理在同一 JVM 中使用。**注意,这意味着没有嵌入式代理/VM 传输支持,只有远程代理。** |
没有功能性改变,这纯粹是 Java 包命名更改
import javax.jms.ConnectionFactory
import javax.jms.Message
import javax.jms...
变成
import jakarta.jms.ConnectionFactory
import jakarta.jms.Message
import jakarta.jms...
在 Maven 中使用 ActiveMQ Classic 5.18.x 提供的 Jakarta 过渡客户端
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client-jakarta</artifactId>
<version>${activemq.version}</version>
</dependency>
注意:在 ActiveMQ Classic 6.0 中,activemq-client-jakarta
模块被删除,因为它不再需要。
Spring bean 使用
Spring bean 定义不会更改以支持 Jakarta。
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
ActiveMQ Classic JMS v3.1、v2.0 实现进度
实现方法可能会更改。请务必在发行说明中验证功能。
欢迎用户反馈!请在 JIRA 中发表评论,提出问题和意见。
JIRA | 状态 | 目标版本 | 完成版本 | 功能 | 注释 |
---|---|---|---|---|---|
AMQ-7309 | 合并 | 5.18.0 | 5.18.0 | JMS v2.0 API 依赖项 | ActiveMQ Classic 将附带 JMS v2.0 依赖项 jar |
AMQ-8322 | 合并 | 5.18.0 | 5.18.0 | JMSContext | 简化的 JMS 上下文对象支持 |
AMQ-8322 | 合并 | 5.18.0 | 5.18.0 | JMSRuntimeException | 将 JMSExceptions 转换为 JMSRuntimeExceptions |
AMQ-8322 | 合并 | 5.18.0 | 5.18.0 | JMSConsumer | 消费消息 |
AMQ-8322 | 合并 | 5.18.0 | 5.18.0 | JMSProducer | 生产消息 |
AMQ-8321 | 合并 | 5.18.0 | 5.18.0 | GetBody/isBodyAssignable | 使用 Class<?> 检查主体类型 |
AMQ-8325 | 合并 | 6.0.0, 5.18.3 | 6.0.0, 5.18.3 | XA 连接方法 | 在使用 XA 事务时更新方法 |
AMQ-8464 | PR #1046 | 6.1.0, 5.18.4 | JMSConsumer | .receiveBody(Class |
|
AMQ-8320 | PR #982 | 6.1.0, 5.18.4 | 交付延迟 | 支持消息交付延迟功能 | |
AMQ-8324 | PR #1045 | 6.1.0, 5.18.4 | JMSProducer 功能 | 完成侦听器异步发送支持 | |
AMQ-8323 | 6.2.0, 5.18.5 | 共享主题使用者 | 从主题订阅中进行多使用者(类似队列)消费 |
功能说明
JMS 对象 | 功能 | 注释 |
---|---|---|
JMSProducer | disableMessageID | ActiveMQ Classic 不支持禁用 MessageID 的可选功能 |