若要在 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 日誌語句。