以佇列目的地分散工作量
如果您新增伺服器叢集到服務整合匯流排中,然後將一或多個傳訊引擎部署到這個叢集中,您可以配置叢集匯流排成員的可調整性。 與部署於叢集的佇列目的地相關聯的傳訊工作量,會分散給叢集匯流排成員中的各個傳訊引擎。
請參閱服務整合高可用性和工作量分散配置,以取得配置傳訊引擎來分散工作量的相關資訊。
- 如果叢集只有一個傳訊引擎,這個傳訊引擎會將目的地本地化。目的地不進行分割。
- 如果叢集中有多個傳訊引擎,由叢集中的所有傳訊引擎來分割目的地。每個傳訊引擎各處理目的地所處理之訊息的一個子集。
傳送訊息到分割的佇列目的地
一般而言,您會建立可調式叢集匯流排成員,如果單一伺服器無法支援佇列的訊息處理負載,就會分割佇列目的地。 為了能夠有效使用,分割的佇列必須有多個消費者,每個分割區至少有一個消費者。 訊息驅動 Bean (MDB) 叢集就是典型的用法。 如需 MDB 如何從叢集化目的地進行消費的詳細資料,請參閱叢集中的訊息驅動 Bean 連接方式。
- 如果生產端應用程式連接到代管佇列目的地之叢集匯流排成員的傳訊引擎,傳訊系統的預設行為
依預設,生產端應用程式偏好將它的所有訊息傳送到本端佇列點。 這個行為可以將訊息抵達佇列點所需經過的距離縮到最短,從而使訊息的遞送獲得最佳效能。
圖 1. 預設行為:訊息傳送到本端佇列點如果無法使用本端佇列點,會依照本端佇列點不存在的方式來處理訊息。 在下列情況下,新訊息無法使用佇列點:- 無法使用擁有佇列點的傳訊引擎(例如,傳訊引擎已停止)。
- 佇列點達到它的高訊息臨界值。
- 佇列點已停用傳送訊息給它的能力。
- 如果生產端應用程式連接到未代管佇列目的地之匯流排成員的傳訊引擎,傳訊系統的預設行為
依預設,傳訊系統會在可用的佇列點之間平衡訊息工作量。
在這個圖中,生產端應用程式連接到未代管佇列目的地之匯流排成員的傳訊引擎,並在可用的佇列點之間,平衡其訊息工作量。
圖 2. 預設行為:在所有佇列點之間,平衡訊息工作量
- 當生產端應用程式連接到代管佇列目的地之匯流排成員的傳訊引擎時,可配置的行為
如果您想要在佇列目的地的所有佇列點之間,進行生產端應用程式所有訊息的工作量平衡,即使連接到含有佇列點的傳訊引擎時也一樣,請考慮在訊息產生者上,停用預設的偏好本端佇列點配置選項。 這個選項適用於 JMS 訊息產生者,以及來自使用 WebSphere® Application Server 7.0 版或更新版本 的外部匯流排連線的入埠訊息。
在這個圖中,生產端應用程式連接到代管佇列目的地之匯流排成員的傳訊引擎。 生產端應用程式已停用「偏好本端佇列點」選項。 會在所有佇列點之間,平衡它的訊息工作量。
圖 3. 停用「偏好本端佇列點」:在所有佇列點之間,平衡訊息工作量不過,如果在匯流排成員的所有傳訊引擎之間,也進行若干生產端應用程式連線的工作量平衡,為了效能原因,請考慮保留預設的偏好本端佇列點行為。 這是因為有如下預設行為:- 在所有佇列點之間,進行來自所有生產端應用程式之訊息的工作量平衡
- 儘可能減少將訊息從連接的傳訊引擎傳送到相同叢集匯流排成員內另一個傳訊引擎的需求
- 當生產端應用程式連接到未代管佇列目的地之叢集匯流排成員的傳訊引擎時,可配置的行為
如果您想要將應用程式生產者單一階段作業期間所產生的所有訊息傳送到相同的佇列點,您可以配置訊息親緣性。 之後,就不會在多個佇列點之間,平衡訊息工作量。
如果您想要將各組訊息傳送到相同的佇列點,以便由單一消費者實例來循序處理,請考慮配置應用程式的訊息親緣性。 系統會根據該應用程式生產者的偏好本端佇列點配置選項,來選取所有訊息都將送往的單一佇列點。 這個選項適用於 JMS 訊息產生者,以及來自使用 WebSphere Application Server 7.0 版或更新版本 的外部匯流排連線的入埠訊息。
在這個圖中,生產端應用程式連接到未代管佇列目的地之匯流排成員的傳訊引擎。 生產端應用程式已配置訊息親緣性。 所有訊息都會傳送到一個佇列點。
圖 4. 訊息親緣性:所有產生的訊息都傳送到相同的佇列點如果所選的佇列點變成無法使用,就會將這個應用程式送出的任何更多的訊息排入轉移至所選佇列點的佇列中,或拒絕傳送作業。 這個行為對應於將訊息傳送到含有單一佇列點的佇列目的地。
從分割的佇列目的地消費訊息
當建立消費者階段作業時,會將消費者連結到目的地的一個分割區。 如果消費者連接到有本端目的地分割區的傳訊引擎,會將消費者連結到這個分割區。 如果消費者連接到沒有目的地分割區的傳訊引擎,會將消費者連結到工作量管理程式動態選取的另一個傳訊引擎中的分割區。 連結之後,消費者只會接收來自連結的分割區的訊息。 依預設,如果消費者所連結的分割區沒有任何訊息,消費者不會接收替代分割區的訊息,即使這些分割區包含訊息也一樣。
如果您在沒有本端消費者的叢集中配置分割目的地,目的地的每個分割區都務必有至少一個消費者,以確保會消費所有訊息。 您可以鎖定個別消費者來連接到有佇列點的特定傳訊引擎,從而做到這一點。 MDB 是特定類型的訊息消費者。 如需從分割目的地消費時,其行為的詳細資料,請參閱叢集中的訊息驅動 Bean 連接方式。
如果您想要消費者接收來自目的地所有可用佇列點的訊息,您可以配置訊息消費者。
如果有大量簡短訊息且 MDB 只會進行少量的處理,您可以依照這個主題所說明,搭配分割佇列來使用平衡工作量的傳訊引擎。 不過,如果 MDB 會大量處理少量的訊息,您可能只需要一個傳訊引擎,但您必須將 MDB 部署到儘可能多的伺服器中,不論這些伺服器是否有傳訊引擎都是如此,即使這些伺服器不是相同 Cell 的成員也一樣。 當 MDB 更新使用者資料庫時,就是典型的狀況。 如需將 MDB 配置成部署於多部伺服器的詳細資料,請參閱配置預設傳訊提供者的 MDB 節流控制。
- 當消費者從分割目的地進行消費時,傳訊系統的預設行為
當建立消費端應用程式的階段作業時,階段作業會與佇列目的地的其中一個佇列點相關聯。 如果佇列目的地有多個佇列點,系統會選擇一個。 依預設,傳訊系統偏好使消費者與所連接傳訊引擎上的本端佇列點相關聯。 如果所連接的傳訊引擎上沒有可用的本端佇列點,系統會利用 WebSphere Application Server 工作量管理程式來選擇另一個佇列,而這會使用循環式加權演算法。
預設行為是嘗試將消費者可用訊息限制於消費者相關聯佇列點中的訊息,使佇列點的訊息消費獲得最佳效能。 消費者無法消費其他佇列點中的訊息,即使相關聯的佇列點沒有訊息,但其他佇列點有訊息,也一樣。
在這個圖中,消費端應用程式連接到沒有本端佇列點的傳訊引擎。 只消費一個相關聯佇列點中的訊息。
圖 5. 預設行為:只消費相關聯佇列點中的訊息
- 當消費者從分割目的地進行消費時,傳訊系統的可配置行為
您可以將訊息消費者配置成,相關聯的佇列點會去收集目的地的所有可用佇列點中的訊息,並使消費者能夠看到這些訊息。
如果您想要消費者將分割的佇列視為未分割的佇列,請考慮配置訊息收集。 不過,相較於消費單一佇列點,收集多個佇列點的訊息,速度會明顯慢許多。 因此,可能的話,請將目的地重新配置成有單一佇列點,或利用別名目的地,將訊息產生者和消費者限制於單一佇列點。 如果您需要多個佇列點的可調整性,且效能很重要,請考慮用替代方案來收集訊息。
在作業的訊息收集模式中,消費者可能無法以訊息保留在佇列點中的順序看到它們。 因此,不會維護訊息順序。
這個選項適用於 JMS 訊息產生者,以及來自使用 WebSphere Application Server 7.0 版或更新版本 的外部匯流排連線的入埠訊息。
在這個圖中,消費端應用程式連接到沒有本端佇列點的傳訊引擎。 消費端應用程式已啟用訊息收集。 相關聯的佇列點會去收集目的地的所有可用佇列點中的訊息,將這些訊息提供給消費者。
圖 6. 訊息收集:消費所有佇列點中的訊息