Sun Java System Message Queue 3.7 UR1 技術摘要

可靠的訊息傳送

訊息傳送會在兩個躍點上執行:第一個躍點會將訊息從產生器傳送到代理程式上的實體目標;第二個躍點則會將訊息從該目標傳送給用戶。因此,訊息可能會在這三個階段之一中遺失:當訊息位於傳送至代理程式的躍點上時;當訊息位於代理程式記憶體中,而代理程式失敗時;當訊息位於代理程式傳送給用戶的躍點上時。可靠的傳送可確保傳送不會在上述任何一個階段中失敗。由於非永久性訊息一律會隨著代理程式失敗而遺失,因此可靠的傳送僅適用於永久性訊息。

有兩種機制可確保傳送的可靠性:

以下各節描述確保可靠性的兩個方面。

確認

確認是在用戶端與訊息服務之間傳送的訊息,可確保郵件傳送的可靠性。產生器與用戶的確認用法不盡相同。

以訊息產生來說,代理程式會確認它已收到訊息,並將其放置在它的目標上,以永久存放。產生器的 send() 方法會暫停運作,直到收到此確認為止。在傳送永久性訊息時,會對用戶端自動進行這些確認作業。

以訊息使用來說,必須在用戶端確認已收到目標傳送的訊息,並加以使用之後,代理程式才會刪除該目標上的該項訊息。JMS 指定不同的確認模式來代表不同程度的可靠性。

對於效能高於可靠性的用戶端而言,Message Queue 服務提供 NO_ACKNOWLEDGE 方法來延伸 JMS API。在此模式中,代理程式不會追蹤用戶端確認,因此無法確保使用用戶端能夠順利處理訊息。選擇此模式可讓您在將非永久性訊息傳送給非長期訂閱者時,都保有較佳的效能。

作業事件

作業事件是將一或多個訊息的產生和 (或) 使用動作,集合為不可分割單位的方法。先前所討論的用戶端與代理程式確認,亦屬於作業事件。在此情況下,用戶端執行階段與代理程式確認會隱含地在作業事件層級上執行。確定作業事件時,代理程式回應會被自動傳送。

階段作業可配置成作業事件,而 JMS API 則提供用於啟動、確認或回復作業事件的方法。

在作業事件中產生或使用訊息時,訊息服務會追蹤各種傳送和接收過程,而且只有在 JMS 用戶端發出確定作業事件的呼叫時,才完成這些作業。如果作業事件中特定的傳送或接收作業失敗,則會出現異常。用戶端程式碼可以透過忽略異常、重試作業或回復整個作業事件來處理異常。在作業事件確定後,將完成所有的作業。在作業事件回復後,將取消所有成功的作業。

作業事件的範圍一律為單一階段作業。亦即,可以將單一階段作業的環境中執行的一個或多個產生器或用戶作業歸類為一個作業事件。由於作業事件僅能是單一階段作業,因此不能有同時包含訊息生產和訊息使用的端對端作業事件。

JMS 規格也支援分散式作業事件。也就是說,訊息的產生和使用可成為較大分散式作業事件的一部分,其中包括涉及資料庫系統等其他資源管理程式的作業。這時必須有作業事件管理程式 (如 Java Systems Application Server 所提供),才能支援分散式作業事件。

在分散式作業事件中,分散式作業事件管理程式使用 Java Transaction API (JTA)、XA 資源 API 規格中定義的兩階段確定協定,追蹤和管理多個資源管理程式 (如訊息服務和資料庫管理員) 執行的作業。在 Java 中,JTA 規格描述了資源管理程式和分散式作業事件管理程式之間的互動。

支援分散式作業事件表示,訊息傳送用戶端可以透過 JTA 定義的 XAResource 介面參與分散式作業事件。此介面定義了實施兩階段確定的許多方法。當用戶端進行 API 呼叫時,JMS 訊息服務僅與 Java Transaction Service (JTS) 提供的分散式作業事件管理程式協作,來追蹤分散式作業事件中的各種傳送和接收作業以及作業事件狀態,並完成訊息傳送作業。處理本機作業事件時,用戶端可以藉由忽略異常、重試作業或回復整個分散式作業事件來處理異常。


備註 –

Message Queue 只有在 Java Enterprise Edition 平台中被當成 JMS 提供者使用時,才支援分散式作業事件。如需有關如何使用分散式作業事件的其他資訊,請參閱應用程式伺服器提供者所提供的文件。


永久性存放區

可靠性的另一層意義,就是確保代理程式在將永久性訊息傳送至用戶之前,訊息不會遺失。這表示當訊息送達實體目標時,代理程式必須將其存放在永久性資料存放區。代理程式若因故中斷,可於稍後回復該訊息,並將其傳送給適當的用戶。

代理程式也必須永久儲存長期訂閱。否則代理程式若是失敗,便無法將訊息傳送給訊息抵達主題目標之後,成為使用中狀態的長期訂閱者。

需要保證訊息傳送的訊息應用程式必須將訊息指定為永久性訊息,並傳送至主題目標的長期訂閱或佇列目標。

第 3 章, Message Queue 服務說明由 Message Queue 服務提供的預設訊息存放區,以及管理員應如何設定及配置替代的存放區。