Apache ActiveMQ Artemis 支援 OpenWire 協定,因此 Apache ActiveMQ “Classic” JMS 用戶端可以直接與 Apache ActiveMQ Artemis 伺服器通訊。預設情況下,有一個 acceptor 設定為在連接埠 61616 上接受 OpenWire 連線。

有關設定 OpenWire 的 acceptor 的詳細資訊,請參閱一般 協定和互通性 章節。

請參閱 OpenWire 範例 以了解此功能的實際運作方式。

1. 連線監控

OpenWire 有一些參數可以控制如何監控每個連線,它們是:

maxInactivityDuration

它指定在未收到任何資料的情況下,broker 關閉連線的時間(毫秒)。預設值為 30000。

maxInactivityDurationInitalDelay

它指定在連線上開始閒置監控之前的最大延遲時間(毫秒)。如果 broker 在同時建立許多連線的情況下處於負載狀態,這會很有用。預設值為 10000。

useInactivityMonitor

值為 false 會完全停用 InactivityMonitor,連線將永遠不會逾時。預設情況下它是啟用的。在 broker 端,您不需要設定此選項。相反地,您可以將 connection-ttl 設定為 -1。

useKeepAlive

表示是否在閒置連線上傳送 KeepAliveInfo 以防止其逾時。預設為啟用。如果連線在指定的時間內沒有收到任何資料,停用 keep alive 仍然會導致連線逾時。

請注意,一開始 InactivityMonitor 會協商適當的 maxInactivityDurationmaxInactivityDurationInitalDelay。連線會採用最短的持續時間。

如需更多詳細資訊,請參閱 ActiveMQ InactivityMonitor

2. 停用/啟用通知

預設情況下,會建立通知主題 (ActiveMQ 通知) 以便將特定類型的通知訊息傳送給正在監聽的用戶端。因此,通知位址和佇列將與使用者部署的位址和佇列一起顯示在管理主控台中。這有時會造成混淆,因為通知物件是在沒有使用者知情的情況下進行內部管理的。此外,使用者可能根本不希望使用通知主題(它們會導致額外的資源和效能損失),並且從 broker 端完全停用它們是很方便的。

該協定提供兩個參數來控制 broker 端上的通知行為。

supportAdvisory

表示 broker 是否支援通知訊息。如果值為 true,將會建立通知位址/佇列。如果值為 false,則不會建立任何通知位址/佇列。預設值為 true

suppressInternalManagementObjects

表示是否會將通知位址/佇列(如果有的話)註冊到管理服務(例如 JMX 登錄)。如果設定為 true,則不會註冊任何通知位址/佇列。如果設定為 false,則會註冊這些位址/佇列,並將顯示在管理主控台上。預設值為 true

這兩個參數是在 OpenWire acceptor 上設定的,例如:

<acceptor name="artemis">tcp://127.0.0.1:61616?protocols=OPENWIRE;supportAdvisory=true;suppressInternalManagementObjects=false</acceptor>

3. OpenWire 目的地快取

為了提高 broker 的效能,我們會保留最近使用的目的地快取,以便在將新訊息分派給它們時,我們不必每次都執行查閱。預設情況下,此快取最多可保存 16 個目的地。如果新增其他目的地,它們將覆蓋舊的記錄。如果您要處理大量的佇列,您可能需要增加此值,這可以透過設定 OpenWire acceptor 上的組態選項:openWireDestinationCacheSize 來完成,如下所示:

<acceptor name="artemis">tcp://127.0.0.1:61616?protocols=OPENWIRE;openWireDestinationCacheSize=64</acceptor>

此快取必須設定為 2 的次方,即:216128 等。

4. 虛擬主題消費者目的地轉換

對於虛擬主題目的地的現有 OpenWire 消費者,可以設定一個對應函數,該函數會將虛擬主題消費者目的地轉換為 FQQN 位址。然後,此位址將表示消費者為多播綁定到表示虛擬主題的位址。

組態字串清單屬性 virtualTopicConsumerWildcards 的各部分以 ; 分隔。第一個是傳統樣式的目的地篩選器,它將目的地識別為屬於虛擬主題。第二個識別 paths 的數量,這些路徑識別消費者佇列,以便可以從目的地剖析該佇列。任何後續部分都是該對應的其他組態參數。

例如,預設虛擬主題的消費者前綴為 Consumer..,則需要 virtualTopicConsumerWildcards 篩選器 Consumer..>;2。當 URL 重要字元 >; 使用其十六進制碼點進行跳脫時,作為 URL 參數,這會轉換為 Consumer.*.%3E%3B2。在 acceptor URL 中,它會是:

<acceptor name="artemis">tcp://127.0.0.1:61616?protocols=OPENWIRE;virtualTopicConsumerWildcards=Consumer.*.%3E%3B2</acceptor>

這會使用組態的 int 元件 2Consumer.A.VirtualTopic.Orders 轉換為 VirtualTopic.Orders::Consumer.A.VirtualTopic.Orders 的 FQQN,以將消費者佇列識別為目的地的最前面兩個路徑。virtualTopicConsumerWildcards 使用 , 分隔符號為多個值。

4.1. selectorAware

對應支援一個選用參數 selectorAware,當其為 true 時,會將任何選取器資訊從 OpenWire 消費者傳輸到任何自動建立的訂閱佇列的佇列篩選器中。

選取器/篩選器會以正常方式與佇列綁定一起保存,以便它在獨立於連線的消費者時運作。

請參閱 OpenWire 範例中包含的虛擬主題對應範例。

5. 記錄

透過為 org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection 啟用 TRACE,可以記錄傳入和傳出的 OpenWire 命令。這對於除錯或只是監控用戶端活動非常有用。除了 OpenWire 命令本身外,還會記錄用戶端的遠端 IP 位址以及內部連線 ID,以便可以關聯來自同一用戶端的命令。

請按照這些步驟來適當地設定記錄。