在叢集配置中,代理程式會共用目標與訊息用戶的資訊;每個代理程式均瞭解下列資訊:
叢集中所有實體目標的名稱、類型和屬性
每個訊息用戶的名稱、位置和偏好
上述資訊的更新 (刪除、增加或重新配置)
這可讓每個代理程式從其本身直接連線的訊息產生器,路由訊息到遠端訊息用戶。產生器的本機代理程式與用戶的本機代理程式有不同的職責:
產生器的本機代理程式負責保留及路由來自該產生器的訊息,記錄、管理作業事件,並且處理來自使用用戶端的確認。
用戶的本機代理程式負責保留用戶相關的資訊、轉寄訊息至用戶,並且讓產生器的代理程式瞭解用戶是否仍然可用,以及訊息是否成功使用。
叢集代理程式會一同作業,將叢集內的訊息流量降到最低;例如,如果遠端代理程式針對相同的主題目標有兩個完全一樣的訂閱,則訊息只會經由線路傳送一次。您可以設定目標特性,指定傳送至本機用戶優先於傳送至遠端用戶,以進一步減少流量。
如果用戶端與代理程式之間需要安全且加密的訊息傳送,可以配置叢集以提供代理程式之間安全的訊息傳送。
針對叢集代理程式上實體目標所設定的屬性,可以套用到叢集中該目標的所有實例;但是這些屬性指定的部分限制會套用到整個叢集,而其他限制則會套用到個別目標實例。表 4–1 列出您可以為實體目標設定的屬性,並指定屬性範圍。
表 4–1 叢集代理程式上實體目標的特性
特性名稱 |
範圍 |
---|---|
maxNumMsgs |
每個代理程式。因此,藉由在叢集中分發產生器,可讓您提高未使用訊息的限制總量。 |
maxTotalMsgBytes |
每個代理程式。因此,藉由在叢集中分發產生器,可讓您提高為未使用訊息所保留的記憶體限制總量。 |
lmitBehavior |
全域 |
maxBytesPerMsg |
每個代理程式 |
maxNumProducers |
每個代理程式 |
maxNumActiveConsumers |
全域 |
maxNumBackupConsumers |
全域 |
consumerFlowLimit |
全域 |
localDeliveryPreferred |
全域 |
isLocalOnly |
全域 |
useDMQ |
每個代理程式 |
不論目標是由管理員所建立、自動建立或是暫時建立,都會影響目標在叢集中傳播的方式,以及在連線失敗或代理程式失敗時處理目標的方式。下列幾節說明幾種使用狀況,以判斷建立目標的時機和複製目標的方式。其中包括:
下圖顯示在用戶端產生至佇列並使用回覆發送模型時,目標的建立和複製方式。
管理員會建立實體目標 QW。在建立叢集期間,佇列會複製到整個叢集。
產生器 ProdQW 傳送訊息到佇列 QW,並使用回覆發送模型,引導回覆到暫時佇列 TempQ1W。(暫時佇列會在應用程式建立暫時目標並增加用戶時,建立並複製。)
本機代理程式 BrokerW 保留傳送到 QW 的訊息,並將該訊息路由到第一個符合此訊息選取條件的使用中用戶。訊息會傳送到用戶 C1QW (在 BrokerX 上) 或用戶 C2QW (在 BrokerY上),這需視哪個用戶已備妥接收訊息而定。接收訊息的用戶會傳送回覆到目標 TempQ1W。
下圖顯示在產生器將訊息傳送到不存在而需要自動建立的目標時,建立和複製目標的方式。
產生器 ProdAutoQY 會將訊息傳送到目標 AutoQY,但是代理程式上不存在該目標。
代理程式會保留訊息,並建立目標 AutoQY。
自動建立的目標不會自動複製到整個叢集。只有當用戶選擇接收佇列 AutoQY 的訊息時,該用戶的本機代理程式才會建立目標 AutoQY,並傳送訊息到用戶。自動建立的目標會在用戶建立它的位置複製到整個叢集。在此範例中,當用戶 CAutoQY 建立目標時,複製便開始進行。
下圖顯示在用戶端將訊息發佈到管理員建立的主題目標時,在叢集中建立和複製目標的方式。
管理員會建立實體主題目標 TY。管理員建立的目標 TY 會複製到整個代理程式叢集 (在使用目標之前)。
發佈者 PubTY 將訊息傳送到主題 TY。
本機代理程式 BrokerY 保留發佈到 TY 的任何訊息,並將訊息路由到符合此訊息選取條件的所有主題訂閱者。在此範例中,C1TY 和 C2TY 訂閱主題 TY。
表 4–2 說明不同類型的目標如何在叢集中進行複製與刪除。
表 4–2 處理叢集中的目標