MQSeries 基本簡介
MQSeries 是個通信系統,他在各種廣泛的硬體和軟體平台之間提供確保的、異步的、一次性數據傳送。
這些特性使得 MQSeries 成為套用程式間通信的最佳基礎結構,並成為一個正確的解決方案,不論這些套用程式是在同一台機器上運行還是在由一個或多個網路分隔的不同機器上運行。
MQSeries 支持所有重要的通信協定,另外還提供在使用不同協定的網路之間的路由。僅需非常少的編程或不必編程,MQSeries 網橋和網關產品就能允許便捷地訪問許多現有的系統和套用程式環境,例如 Lotus Notes、Web 瀏覽器、Java 小套用程式和許多其他產品。
確保的傳遞能力反映為許多在 MQSeries 中內建的功能能確保不會因為基本系統或網路結構故障而丟失數據。確保的傳遞能力使得 MQSeries 形成了關鍵通信系統的主幹,並被受託傳遞重要數據。在某些適當的場合也可提供你選擇健壯性稍低的服務質量。例如,可能在一些環境中,你會需要更快速的傳遞,而對可信傳遞方面強調較少。
MQSeries 中的異步處理支持是指在傳送和接收套用程式之間的數據交換是和時間無關的。這允許傳送和接收套用程式相互分離,這樣傳送方就能繼續處理,而不必等待接收方確認其已接收到數據。實際上,在傳送數據時目標套用程式甚至不必運行。同樣,在傳送數據時,能不使用傳送方和接收方之間的網路路徑。
一次性傳遞數據是個重要的考慮因素,特別是在金融和商業套用程式中,你肯定不希望從一個帳戶中移動大量錢款至另一帳戶的請求重複發生。
MQSeries 中需要理解的三個基本概念
1. 訊息訊息就是對使用他的套用程式有意義的位元組串。訊息是用來從一個套用程式傳送數據至另一個套用程式(或相同套用程式中的不同部分)。套用程式能在同一個平台或不同的平台上運行。
MQSeries 訊息有兩部分;套用程式數據和訊息描述符。套用程式數據的內容和結構由使用數據的套用程式來定義。訊息描述符標識了該訊息,並包含其他控制信息,如訊息類型及由傳送套用程式為訊息指定的優先權。
佇列是存儲訊息的數據結構。由套用程式或佇列管理器將訊息放入佇列或從佇列中取出,是他的一些常規操作。
佇列對於使用他們的套用程式來說是獨立存在的。佇列可存在於主存儲器(如果他是臨時的),磁碟或相似的輔助存儲器(如果必須保留以備恢復的話),或同時在這兩處(如果他正在使用,且必須保留以備恢復)。每個佇列都屬於一個佇列管理器,他負責維護佇列。佇列管理器將接收到的訊息放入合適的佇列中。
佇列能在本地系統上存在,這種情況下他們稱為本地佇列,也能在另一個佇列管理器上存在,這種情況下他們稱為遠程佇列。
套用程式傳送訊息至佇列,或從佇列中接收訊息。例如,一個套用程式能將訊息放入佇列,而另一個套用程式能從相同佇列中取出訊息。
每個佇列都有一些佇列屬性,他們確定了在套用程式引用佇列時將執行的操作。屬性表明:
套用程式是否能從佇列中檢索訊息(允許取出)。
套用程式是否能將訊息放入佇列中(允許放入)。
訪問佇列是由一個套用程式獨占還是在套用程式間共享的。
可同時在佇列上存儲的最大訊息數(最大佇列深度)。
可放入佇列的訊息的最大大小(最大訊息大小)。
佇列管理器為套用程式提供了排隊服務,並管理屬於他的佇列。他確保:
根據接收到的細節更改對象屬性。
當發生特別情況時,產生特別事件(例如設備事件或觸發器事件)。
按照套用程式的請求將訊息放入正確佇列。如果不能完成,則將通知套用程式並給出適當的原因碼。
每個佇列都屬於一個單一佇列管理器,對於那個佇列管理器來說他是本地佇列。和套用程式連線的佇列管理器被認為是該套用程式的本地佇列管理器。對於該套用程式,屬於本地管理器的佇列是本地佇列。 遠程佇列是屬於另一個佇列管理器的佇列。遠程佇列管理器是非本地佇列管理器的所有其他佇列管理器。遠程佇列管理器可存在於網上的一個遠程機器上,或存在於和本地佇列管理器相同的機器上。MQSeries 支持同一台機器上的多個佇列管理器。
MQSeries 設定
最簡單的設定是 MQSeries 安裝在一台機器上並創建了一個佇列管理器。該佇列管理器允許定義佇列。這樣本地套用程式就能使用這些佇列交換訊息。
通過套用程式和另一個佇列管理器管理的佇列之間進行通信需要定義訊息通道。不必定義直接到目標佇列管理器的通道,適當的做法通常是僅定義下一個轉接點(即中間佇列管理器)。對該佇列管理器可用的訊息通道將被用於傳遞訊息至目標佇列管理器(或至下一個轉接點)。
使用客戶機/伺服器結構能創建更複雜的設定。MQSeries 產品能作為和 MQSeries 客戶機連線的 MQSeries 伺服器使用。客戶機和伺服器不必在相同平台上。MQSeries 支持廣泛的各種客戶機平台。MQSeries 產品通常會包含各種平台的客戶機。附加的 MQSeries 客戶機可從 MQSeries Web 站點獲得。
在客戶機/伺服器設定中,MQSeries 伺服器為客戶機及所有本地套用程式提供訊息傳遞和排隊服務。客戶機通過客戶機的專用通道(也叫做客戶機通道)連線到伺服器。這是個符合成本效益的部署方法,因為僅使用一個 MQSeries 伺服器產品副本,伺服器就可支持幾百個客戶機。不過無論何時運行客戶機上的 MQSeries 套用程式,客戶機通道都必須持續可用。這和某些訊息通道不必持續可用就可支持在伺服器上運行的 MQSeries 套用程式相反。
MQSeries 還支持群集概念以簡化設定和操作。群集是個命名的佇列管理器集合,並且所有一個佇列管理器都能不屬於群集、或屬於一個或多個這樣的群集。群集中的佇列管理器能存在於相同或不同機器上。
如果沒有已定義的佇列管理器,由 MQSeries 視窗系統 NT 和 視窗系統 2000 版安裝進程提供的預設設定能設定一個佇列管理器加入到本地預設群集中。佇列管理器的名稱是基於機器的 TCP/IP 域。
使用群集有兩個主要的好處:
在一個群集中的成員之間進行通信是非常簡單的,特別是因為交換訊息所需的通道是根據需要自動定義和創建的。
參和佇列管理器中的一些或全部佇列可被定義為群集佇列,這樣能使得他們自動被群集中的所有其他佇列管理器知曉並使用。
通道為佇列管理器提供了通信路徑。有兩種類型的通道:訊息通道和 MQI 通道。
訊息通道提供了在相同平台或不同平台上兩個佇列管理器之間的通信路徑。訊息通道是用於從一個佇列管理器至另一個佇列管理器傳送訊息,同時使得套用程式避免了基本網路協定的複雜性。訊息通道只可單向傳送訊息。如果在兩個佇列管理器間需要雙向通信,則需要兩個訊息通道。
客戶機通道(也稱為 MQI 通道)將 MQSeries 客戶機連線到伺服器機器上的佇列管理器,並且是雙向的。
如果要閱讀有關通道的更多信息,及 MQSeries 怎么使用他們在網路中跨越各種系統進行通信,請參閱 MQSeries Intercommunication一書。
MQSeries 支持 MQSeries 套用程式的客戶機/伺服器設定。
MQSeries 客戶機是 MQSeries 產品的一部分,他安裝在機器上,接受來自套用程式的 MQSeries 調用並將他們傳遞給 MQSeries 伺服器 機器。在那裡他們由佇列管理器處理。典型地,客戶機和伺服器駐留在不同機器上,但他們能同處在一台機器上。
MQSeries 伺服器是為一個或多個客戶機提供排隊服務的佇列管理器。所有 MQSeries 對象(例如佇列)都僅存在於佇列管理器機器上(即 MQSeries 伺服器機器上)。伺服器也能支持本地 MQSeries 套用程式。
MQSeries 伺服器和普通的佇列管理器之間的差別在於 MQSeries 伺服器可支持 MQSeries 客戶機,並且每個 MQSeries 客戶機套用程式和 MQSeries 伺服器之間都有一個專用的通信鏈路。
有關客戶機支持的更多信息,請參閱 MQSeries 客戶機一書。
群集是個命名的佇列管理器集合。
群集需要群集內的至少一個佇列管理器被定義為資源庫 (即存放共享群集信息的地方)。更典型的做法是,通常指定兩個或更多個資源庫以提供在系統出現故障時的持續可用性。MQSeries 確保資源庫中的信息保持同步。
當佇列被定義為群集佇列時,他可被認為是公用佇列,可被群集中的其他佇列管理器自由使用。這和非群集佇列不同,非群集佇列僅當他們的本地定義可用時,才可訪問。因此,非群集佇列具有專用佇列的特性,僅可由那些已設定為知道他們的佇列管理器來訪問。
在相同群集中具有相同名稱的公用佇列被認為是等價的。如果訊息被傳送至該佇列名稱,MQSeries(預設情況下)將使用一個負載均衡算法將他傳送到其中的所有一個。如果你不希望發生這一情況,能在地址中使用佇列管理器和佇列名稱,這就迫使訊息被傳送到特定的佇列管理器。或,可使用另一種實現方法來替換負載均衡例程。這就是典型的 MQSeries 行為,其中有許多示例表明標準行為能更改,方法是在為該目的設計的出口中實現用戶代碼。
MQSeries 可用來創建許多不同類型的解決方案。其中一些採用了平台支持或網橋和網關能力,用一種集成方法連線至現存的系統,或允許新建套用程式從現存的系統中抽取信息,或和現存系統交換信息。其他一些解決方案支持商業套用程式伺服器,在其上 MQSeries 套用程式的中心池能跨網路管理髮送的工作。能支持工作流方案的複雜的信息路由選擇。 “發布/訂閱”或“傳送即忘”是使用不同訊息流的其他套用程式方案。能使用 MQSeries 的能力和靈活性建立負載均衡和熱備用系統,MQSeries 包括了許多支持這些不同方案的特定功能。
請參閱 MQSeries 套用程式設計指南獲得有關編寫 MQSeries 套用程式的更多信息。
套用程式可能需要將一組更新組合成一個工作單元。這些更新通常是邏輯相關的,並且都必須成功以保持數據完整性。如果在組中的一個更新成功而另一個失敗,那么數據完整性可能會丟失。MQSeries 支持事務性的訊息傳遞。
工作單元成功完成後就提交。此時,所有在工作單元內所做的更新都將變成永久的並且是不可逆的。或,如果工作單元失敗了,所有更新都被逆序恢復。同步點協調是工作單元用來提交或逆序恢復完整性的進程。
本地工作單元上唯一更新的那些資源是 MQSeries 佇列管理器的資源。這裡同步點協調是由佇列管理器自身使用單階段提交進程提供的。
全局工作單元上屬於其他資源管理器的資源,例如符合 XA 的資料庫,也同時被更新。這裡,必須使用兩階段提交過程,並且工作單元可由佇列管理器自身協調,或由其他符合 XA 的事務管理器(例如 IBM CICS、IBM Transaction Server、IBM TXSeries、Transarc Encina 或 BEA tuxedo)外部協調。
當佇列管理器自己協調全局工作單元時,就有可能在 MQSeries 工作單元內集成資料庫更新。就是說,能編寫混合的 MQSeries 和 SQL 套用程式,並且能使用命令來一起提交或逆序恢復對佇列和資料庫的更改。
佇列管理器使用兩階段提交協定來完成他。當實施一個工作單元時,佇列管理器將首先詢問每個參和的資料庫管理器是否準備提交更新。只有當所有的參和者,包括佇列管理器自己,都準備提交時,所有佇列和資料庫更新才提交。如果所有參和者不能準備他的更新時,則逆序恢復工作單元來代替提交工作單元。
如果佇列管理器在提交協定期間失去和所有資料庫管理器的聯繫,則將提供完全恢復支持。如果資料庫管理器因處於未確定狀態而變為不可用(就是說,已調用他作準備,但還要接收提交或逆序恢複決定),則佇列管理器將記住工作單元的結果,直到他被成功傳遞為止。同樣地,如果佇列管理器終止時有未完成的提交操作,那么佇列管理器重新啟動時他們將被記住。
能使用 MQSeries 設備事件來監視佇列管理器的操作。
設備事件能在佇列管理器檢測到一組預定義的情況發生時生成稱為事件訊息的特別訊息。例如,在以下情況時將生成佇列滿事件訊息:對於指定佇列啟用了“佇列滿”事件;套用程式發出 MQPUT 調用在佇列中放入訊息;並且由於佇列已滿引起調用失敗。
其他條件也能引起設備事件,包括:
達到佇列中訊息數的預定義極限。
在指定時間內佇列沒獲得服務。
啟動或停止的通道實例。
如果將事件佇列定義為遠程佇列,則可將所有事件佇列放入單個佇列管理器中(對於那些支持設備事件的節點)。然後,能從單個節點使用生成的事件監視佇列管理器的網路。
MQSeries 設備事件分為下列幾種:
佇列管理器事件
這些事件和佇列管理器中的資源定義有關。例如,如果套用程式嘗試打開佇列,但關聯的用戶標識沒有經過授權執行該操作,將生成佇列管理器事件。
性能事件
這些是在資源達到閾值條件時將產生的通知。例如,達到佇列深度極限,或按照 MQGET 請求,在預先定義的時間內未對佇列進行服務。能使用 視窗系統 NT 性能監視器來檢查和控制佇列的某些方面(例如,佇列深度、佇列深度百分率、及有多少訊息已入隊和出隊)。
通道事件
這些事件是由通道報告的,作為操作期間檢測條件的結果。例如,在通道實例停止時產生一個通道事件。
訊息驅動處理
當訊息到達佇列後,他們能使用一種稱為觸發的機制來自動啟動套用程式。如果必要的話,套用程式可在處理完訊息後停止。