叢集中的訊息驅動 Bean 連接方式

當 Enterprise Bean (EJB) 應用程式部署於應用程式伺服器叢集時,應用程式可以執行於叢集中的任何伺服器,以提供應用程式的高可用性和可調整性。 當 EJB 應用程式是訊息驅動 Bean (MDB) 時,它可以執行於叢集中的任何伺服器(高可用性),且可以在叢集的多部應用程式伺服器中同時接受呼叫(可調整性)。 這個行為取決於 MDB 相對於任何服務整合匯流排成員的位置,以及 MDB 本身的配置。

註: 為了易於管理,請將 MDB 直接連接到擁有 MDB 所處理的匯流排佇列或訂閱之匯流排成員中的傳訊引擎,不要透過中間傳訊引擎來連接。 為了有最佳傳訊效能,請將 MDB 部署到匯流排成員的相同應用程式伺服器或叢集中。

依預設,當 MDB 應用程式部署到也是服務整合匯流排叢集匯流排成員的應用程式伺服器叢集時,MDB 應用程式會連接到在叢集內各伺服器上的一或多個傳訊引擎。 在How JMS applications connect to a messaging engine on a bus中,說明了預設的連線行為,以及包括訊息驅動 Bean 的任何 JMS 應用程式都適用的額外連線控制。 不過,如果您使用這個主題所說明的配置選項,就只會在叢集內代管已啟動的傳訊引擎的那些伺服器上,驅動訊息驅動 Bean。

對於連接到叢集匯流排成員的 MDB 應用程式而言,您也可以啟用下列其他配置之一:
  • 叢集內的所有伺服器都可以從 MDB 應用程式接收訊息,以充分運用叢集的處理能力。
  • 每次只有一部伺服器能夠接收來自 MDB 應用程式的訊息,以確保會循序處理訊息。
這幾節的各圖表遵循這個線索:
圖 1. 主題圖線索
這個圖是相關於下列各圖表的線索。

MDB 連線行為:在單一叢集匯流排成員內

只在叢集匯流排成員內代管已啟動的傳訊引擎的那些伺服器上,驅動訊息驅動 Bean

這是預設選項。 如果訊息驅動 Bean 部署於某個叢集匯流排成員,則只有伺服器中在本端啟動傳訊引擎的 MDB 端點,才有資格由可用訊息來加以驅動。

在圖 2 中,叢集匯流排成員包含三部伺服器。 server1 和 server2 各包含一部作用中及失效接手傳訊引擎。 這兩部伺服器所執行的 MDB 端點都是連接到它們各自的本端傳訊引擎。 server3 未代管已啟動的傳訊引擎,但它代管兩個失效接手傳訊引擎。 它沒有作用中的 MDB 端點,沒有消費訊息的資格。

圖 2. MDB 由叢集匯流排成員內代管已啟動的傳訊引擎的各部伺服器來驅動(設定 1)
這個圖周圍的文字是說明。

如果傳訊引擎可以在叢集內各伺服器之間進行失效接手,這個配置也提供 MDB 應用程式及匯流排目的地上的訊息的高可用性。

在圖 3 中,叢集匯流排成員如前圖所示。 server2 已進行 server1 中之傳訊引擎的失效接手。 因此,server2 現在包含兩個作用中的傳訊引擎,執行於 server2 的 MDB 端點現在會連接這兩個本端傳訊引擎。 第三部伺服器未代管已啟動的傳訊引擎,它沒有作用中的 MDB 端點,沒有消費訊息的資格。

圖 3. MDB 由叢集匯流排成員內代管已啟動的傳訊引擎的各部伺服器來驅動(設定 2)
這個圖周圍的文字是說明。

除非您在啟動規格上選取 一律在所有伺服器中啟動 MDB 選項,否則,會啟用這個配置。

叢集匯流排成員中的所有伺服器都可以接收來自訊息驅動 Bean 的訊息

您可以將所有叢集伺服器中的 MDB 端點都設為有資格由訊息來驅動,不論是否有本端已啟動的傳訊引擎都是如此。 在沒有已啟動的傳訊引擎的伺服器中,任何 MDB 端點都會直接連接到在叢集內某部其他伺服器中的其中一個傳訊引擎。 這個方式可以確保能夠利用叢集所有可用的資源來處理送往目的地的訊息。

在圖 4 中,叢集匯流排成員包含三部伺服器。 兩部伺服器包含作用中的傳訊引擎。 這兩部伺服器中的 MDB 端點都是連接到它們各自的本端傳訊引擎。 第三部伺服器未代管已啟動的傳訊引擎,它會在叢集內各個可用的傳訊引擎之間平衡工作量。 第三部伺服器中的 MDB 端點會連接到執行於另兩部伺服器其中一部的傳訊引擎。

圖 4. 叢集匯流排成員中的伺服器會接收來自訊息驅動 Bean 的訊息
這個圖周圍的文字是說明。

如果要選擇這個配置,請在啟動規格上選取 一律在所有伺服器中啟動 MDB 選項。

註: 就驅動哪些 MDB 端點而言,這個配置可達成與下列配置(這個主題也有其說明)相同的效果:叢集中的所有伺服器都可以接收來自叢集匯流排成員中各傳訊引擎的訊息

MDB 連線行為:在叢集和個別匯流排成員之間

叢集中的所有伺服器都可以接收來自叢集匯流排成員中各傳訊引擎的訊息

如果您將 MDB 應用程式部署到不是匯流排成員的叢集,MDB 會遵循How JMS applications connect to a messaging engine on a bus中所說明的連線規則,試圖從叢集中的每部應用程式伺服器連接到匯流排。 這通常會使來自匯流排成員內某作用中傳訊引擎的訊息,同時驅動叢集中的所有 MDB 端點。 這個方式可以確保能夠利用叢集所有可用的資源,來處理送往叢集匯流排成員中之目的地的訊息。

在圖 5 中,叢集包含三部伺服器,每部伺服器各有一個 MDB 端點。 一個叢集匯流排成員包含兩部伺服器,其中一部代管作用中的傳訊引擎。 叢集的三個 MDB 端點都連接到叢集匯流排成員的這個作用中的傳訊引擎。

註: 在這個配置之下,可能無法建立通往所有傳訊引擎的連線,因此,可能會有傳訊引擎沒有連線,從而出現孤立無援的訊息。 如果 MDB 所用的啟動規格設為伺服器範圍,就比較不會出現這個狀況。
圖 5. 叢集中的所有伺服器都會接收來自叢集匯流排成員中各傳訊引擎的訊息
這個圖周圍的文字是說明。
註: 就驅動哪些 MDB 端點而言,這個配置可達成與下列配置(這個主題也有其說明)相同的效果:叢集匯流排成員中的所有伺服器都可以接收來自訊息驅動 Bean 的訊息
叢集中只有一部伺服器可以接收來自叢集匯流排成員中某傳訊引擎的訊息

如果要達到每次都由單一伺服器來循序處理目的地上的訊息,請將系統配置成,訊息每一次都只驅動單一 MDB 端點。 在這個型樣之下,其他 MDB 端點和傳訊引擎都會在有效待命中,準備好在 server1 停止時,接手處理訊息。

在圖 6 中,叢集包含三部伺服器,每部伺服器各有一個 MDB 端點。 一個叢集匯流排成員也包含兩部伺服器,其中一部有作用中的傳訊引擎。 在叢集的三個 MDB 端點中,只有一個會連接到在叢集匯流排成員中執行的作用中傳訊引擎。

圖 6. 一部伺服器接收來自叢集匯流排成員中傳訊引擎的訊息
這個圖周圍的文字是說明。

如果要選擇這個配置,請將啟動規格配置成,所有非匯流排叢集伺服器中的 MDB 端點,都有資格由來自叢集匯流排成員中某傳訊引擎的訊息來驅動,然後在叢集匯流排成員中的目的地上,設定接收互斥選項。 當其中一個 MDB 端點連接到傳訊引擎時,這個引擎會阻止所有其他可用的 MDB 端點進行連接,然後繼續透過相同的 MDB 端點來處理訊息。

如果要達成 MDB 對訊息的循序處理,可能需要進一步的配置。 如需確保循序處理目的地訊息的相關資訊,請參閱Message ordering


指出主題類型的圖示 概念主題



時間戳記圖示 前次更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_mdb_endpt_overview
檔名:cjn_mdb_endpt_overview.html