若要在 Java EE 或 Jakarta EE 環境中使用 Apache ActiveMQ Artemis,您可以使用 JCA 資源配接器。
相較於一般的 JMS 連線工廠,基於 JCA 的 JMS 連線工廠有兩個主要優勢:
-
池化 (Pooled) - 一般而言,當從基於 JCA 的 JMS 連線工廠「建立」連線時,底層的實體連線會從連線池中取出;當連線「關閉」時,底層的實體連線會返回連線池。這消除了實際建立和銷毀實體連線的效能損失,使客戶端程式碼可以採用通常被認為是反模式的方式編寫(例如,為每個發送的訊息「建立」和「關閉」連線)。
-
自動加入 JTA 交易 - 大多數情況下,在 Java/Jakarta EE 環境中取用 JMS 訊息的應用程式都是透過 MDB (Message-Driven Bean) 進行。預設情況下,在 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. 設定
設定分為兩個部分。第一部分是將訊息發送到目的地的設定(出站),第二部分是從目的地取用訊息的設定(入站)。兩者可以單獨設定,也可以都使用 ResourceAdapter 的設定。
以下列出一些選項。如果您想要概觀所有設定選項,請參考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
檔案,以了解選項和說明。您可以在其中設定 ResourceAdapter 的預設選項。透過應用程式伺服器中 ResourceAdapter 的設定,您正在覆寫 rar.xml
的預設值。透過 ConnectionFactory 或 ActivationSpec 的設定,您可以覆寫 ResourceAdapter 的設定。
3.1. ResourceAdapter
設定選項 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. ConnectionFactory
出站 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
-
連線到 broker 的 URL
- cacheDestinations
-
由 jms 會話決定
3.2.1. ConnectionManager
您無法設定任何屬性。
3.3. ActivationSpec
設定選項 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
-
此啟動規格使用的 connectionFactory 的 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
-
從 broker 並行取用訊息
3.3.1. 僅適用於主題訊息取用
- subscriptionDurability
-
持久 / 非持久
- subscriptionName
-
如果您使用持久訂閱,Artemis 會保留此名稱的所有訊息
4. 日誌
使用套件 org.apache.activemq.artemis.ra
您可以捕獲所有 ResourceAdapter 日誌語句。