聯合允許在訊息代理器之間傳輸訊息,而無需叢集。
聯合位址可以將從上游位址發布的訊息複製到本機位址。注意:這僅支援多播位址。
聯合佇列讓本機消費者可以接收來自上游佇列的訊息。
一個訊息代理器可以包含聯合和僅限本機的組件 - 如果您不想,您不需要聯合所有內容。
1. 優點
1.1. 廣域網路 (WAN)
來源和目標伺服器不必在同一個叢集中,這使得聯合適合於將訊息從一個叢集可靠地發送到另一個叢集,例如跨越廣域網路、雲端區域之間或連接可能不可靠的情況。
聯合具有內建的故障恢復能力,因此如果目標伺服器連線遺失,例如由於網路故障,聯合將重試連線到目標,直到它恢復上線。當它恢復上線時,它將恢復正常運作。
1.3. 動態與選擇性
聯合是透過策略應用的,這些策略會比對位址和佇列名稱,然後應用。
這意味著聯合可以隨著佇列或位址的添加和刪除而動態應用,無需個別設定它們。
同樣地,策略是選擇性的。它們會應用多個包含和排除比對。
多個策略可以直接應用到多個上游。策略可以分組到策略集中,然後應用到上游,以方便管理。
2. 位址聯合
位址聯合類似於跨已連線訊息代理器的完整多播。發送到 Broker-A
上位址的每個訊息都將傳遞到該訊息代理器上的每個佇列,但也會傳遞到 Broker-B
及其所有附加佇列。
有關更多詳細資訊,請參閱位址聯合。
3. 佇列聯合
聯合佇列充當在多台機器上具有多個接收器的單一邏輯佇列。它們可用於負載平衡。如果訊息代理器位於相同的可用區域中,您應該考慮將它們叢集化。佇列聯合的優點是它不需要叢集,因此適用於廣域網路、跨區域或內部/外部部署使用。
有關更多詳細資訊,請參閱佇列聯合。
4. 廣域網路全網狀
也可以提供訊息代理器的廣域網路網狀結構,它可以
-
透過位址聯合進行複製
-
使用佇列聯合進行路由和負載平衡
-
連結遠端的生產者和消費者
5. 設定聯合
broker.xml
中的設定範例
<federations>
<federation name="eu-north-1-federation">
<upstream name="eu-west-1" user="westuser" password="32a10275cf4ab4e9">
<static-connectors>
<connector-ref>connector1</connector-ref>
</static-connectors>
<policy ref="policySetA"/>
</upstream>
<upstream name="eu-east-1" user="eastuser" password="32a10275cf4ab4e9">
<discovery-group-ref discovery-group-name="ue-west-dg"/>
<policy ref="policySetA"/>
</upstream>
<policy-set name="policySetA">
<policy ref="address-federation" />
<policy ref="queue-federation" />
</policy-set>
<queue-policy name="queue-federation" >
<exclude queue-match="federated_queue" address-match="#" />
</queue-policy>
<address-policy name="address-federation" >
<include address-match="federated_address" />
</address-policy>
</federation>
</federations>
在上面的範例中,我們展示了為多個上游設定佇列和位址聯合所需的基本關鍵參數。
此範例顯示訊息代理器 eu-north-1
連接到兩個上游訊息代理器 eu-east-1
和 eu-west-1
。將佇列聯合應用到佇列 federated_queue
,並將位址聯合應用到位址 federated_address
。
重要的是,聯合名稱必須是全域唯一的。
您可以應用許多設定選項。這些在個別文件中詳細說明
可以使用來自連接器引用 URI 的額外參數來覆寫或為 ServiceLocator 提供其他設定。 |
5.1. 大型訊息
如果聯合必須處理大型訊息,則需要變更消費者的預設 ackBatchSize
和 consumerWindowSize
,以限制傳輸中的訊息數量並啟用大型訊息流。這些選項可以作為所引用連接器 URI 上的參數提供,例如
tcp://<host>:<port>?ackBatchSize=100&consumerWindowSize=-1