JMS v2.0
ActiveMQ Classic 5.x 對 JMS v3.1 和 v2.0 的支援正在進行中。
轉換方法
最初,ActiveMQ Classic 用戶端將不支援所有 JMS 2.0 功能,並且對於不支援的方法和功能,例如使用 CompletionListener
的非同步傳送、傳送具有傳遞延遲的消息以及使用共享主題消費者,將拋出 UnsupportedOperationException
(RuntimeException
)。
隨著後續版本中功能的實現,這些例外將被完全正常運作的方法、範例和單元測試取代。有關實施進度的更多詳細信息,請參閱後續/下方。
Jakarta Messaging 3.1 支援
對 JMS 2.0 的支援也為過渡到 Jakarta Messaging 3.1 及其新的 jakarta.jms
API 命名空間(而不是歷史的 javax.jms
命名空間)奠定了基礎。
- Java Enterprise 功能的未來標準
- 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 Context 物件支援 |
AMQ-8322 | 已合併 | 5.18.0 | 5.18.0 | JMSRuntimeException | 將 JMSException 轉換為 JMSRuntimeException |
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 的選擇性功能 |