標籤: 暫無標籤

MQSeries 是個通信系統,他在各種廣泛的硬體和軟體平台之間提供確保的、非同步的、一次性數據發送。這些特性使得 MQSeries 成為應用程式間通信的最佳基礎結構,並成為一個正確的解決方案,不論這些應用程式是在同一台機器上運行還是在由一個或多個網路分隔的不同機器上運行。 MQSeries 支持所有重要的通信協議,另外還提供在使用不同協議的網路之間的路由。僅需非常少的編程或不必編程,MQSeries 網橋和網關產品就能允許便捷地訪問許多現有的系統和應用程式環境。

1 MQSeries -MQSeries 基本簡介

  MQSeries 是個通信系統,他在各種廣泛的硬體和軟體平台之間提供確保的、非同步的、一次性數據發送。

  這些特性使得 MQSeries 成為應用程式間通信的最佳基礎結構,並成為一個正確的解決方案,不論這些應用程式是在同一台機器上運行還是在由一個或多個網路分隔的不同機器上運行。

  MQSeries 支持所有重要的通信協議,另外還提供在使用不同協議的網路之間的路由。僅需非常少的編程或不必編程,MQSeries 網橋和網關產品就能允許便捷地訪問許多現有的系統和應用程式環境,例如 Lotus Notes、Web 瀏覽器、Java 小應用程式和許多其他產品。

  確保的傳遞能力反映為許多在 MQSeries 中內建的功能能確保不會因為基本系統或網路結構故障而丟失數據。確保的傳遞能力使得 MQSeries 形成了關鍵通信系統的主幹,並被受託傳遞重要數據。在某些適當的場合也可提供你選擇健壯性稍低的服務質量。例如,可能在一些環境中,你會需要更快速的傳遞,而對可信傳遞方面強調較少。

  MQSeries 中的非同步處理支持是指在發送和接收應用程式之間的數據交換是和時間無關的。這允許發送和接收應用程式相互分離,這樣發送方就能繼續處理,而不必等待接收方確認其已接收到數據。實際上,在發送數據時目標應用程式甚至不必運行。同樣,在傳送數據時,能不使用發送方和接收方之間的網路路徑。

  一次性傳遞數據是個重要的考慮因素,特別是在金融和商業應用程式中,你肯定不希望從一個帳戶中移動大量錢款至另一帳戶的請求重複發生。

2 MQSeries -MQSeries 中需要理解的三個基本概念

1. 消息

  消息就是對使用他的應用程式有意義的位元組串。消息是用來從一個應用程式傳送數據至另一個應用程式(或相同應用程式中的不同部分)。應用程式能在同一個平台或不同的平台上運行。

  MQSeries 消息有兩部分;應用程式數據和消息描述符。應用程式數據的內容和結構由使用數據的應用程式來定義。消息描述符標識了該消息,並包含其他控制信息,如消息類型及由發送應用程式為消息指定的優先順序。

2. 隊列

  隊列是存儲消息的數據結構。由應用程式或隊列管理器將消息放入隊列或從隊列中取出,是他的一些常規操作。

  隊列對於使用他們的應用程式來說是獨立存在的。隊列可存在於主存儲器(如果他是臨時的),磁碟或相似的輔助存儲器(如果必須保留以備恢復的話),或同時在這兩處(如果他正在使用,且必須保留以備恢復)。每個隊列都屬於一個隊列管理器,他負責維護隊列。隊列管理器將接收到的消息放入合適的隊列中。

  隊列能在本地系統上存在,這種情況下他們稱為本地隊列,也能在另一個隊列管理器上存在,這種情況下他們稱為遠程隊列。

  應用程式發送消息至隊列,或從隊列中接收消息。例如,一個應用程式能將消息放入隊列,而另一個應用程式能從相同隊列中取出消息。

  每個隊列都有一些隊列屬性,他們確定了在應用程式引用隊列時將執行的操作。屬性表明:

  應用程式是否能從隊列中檢索消息(允許取出)。

  應用程式是否能將消息放入隊列中(允許放入)。

  訪問隊列是由一個應用程式獨佔還是在應用程式間共享的。

  可同時在隊列上存儲的最大消息數(最大隊列深度)。

  可放入隊列的消息的最大大小(最大消息大小)。

3. 隊列管理器

  隊列管理器為應用程式提供了排隊服務,並管理屬於他的隊列。他確保:

  根據接收到的細節更改對象屬性。

  當發生特別情況時,產生特別事件(例如設備事件或觸發器事件)。

  按照應用程式的請求將消息放入正確隊列。如果不能完成,則將通知應用程式並給出適當的原因碼。

  每個隊列都屬於一個單一隊列管理器,對於那個隊列管理器來說他是本地隊列。和應用程式連接的隊列管理器被認為是該應用程式的本地隊列管理器。對於該應用程式,屬於本地管理器的隊列是本地隊列。 遠程隊列是屬於另一個隊列管理器的隊列。遠程隊列管理器是非本地隊列管理器的所有其他隊列管理器。遠程隊列管理器可存在於網上的一個遠程機器上,或存在於和本地隊列管理器相同的機器上。MQSeries 支持同一台機器上的多個隊列管理器。

3 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 支持事務性的消息傳遞。

  工作單元成功完成後就提交。此時,所有在工作單元內所做的更新都將變成永久的並且是不可逆的。或,如果工作單元失敗了,所有更新都被逆序恢復。同步點協調是工作單元用來提交或逆序恢復完整性的進程。

  本地工作單元上唯一更新的那些資源是 MQSeries 隊列管理器的資源。這裡同步點協調是由隊列管理器自身使用單階段提交進程提供的。

  全局工作單元上屬於其他資源管理器的資源,例如符合 XA 的資料庫,也同時被更新。這裡,必須使用兩階段提交過程,並且工作單元可由隊列管理器自身協調,或由其他符合 XA 的事務管理器(例如 IBM CICS、IBM Transaction Server、IBM TXSeries、Transarc Encina 或 BEA tuxedo)外部協調。

  當隊列管理器自己協調全局工作單元時,就有可能在 MQSeries 工作單元內集成資料庫更新。就是說,能編寫混合的 MQSeries 和 SQL 應用程式,並且能使用命令來一起提交或逆序恢復對隊列和資料庫的更改。

  隊列管理器使用兩階段提交協議來完成他。當實施一個工作單元時,隊列管理器將首先詢問每個參和的資料庫管理器是否準備提交更新。只有當所有的參和者,包括隊列管理器自己,都準備提交時,所有隊列和資料庫更新才提交。如果所有參和者不能準備他的更新時,則逆序恢復工作單元來代替提交工作單元。

  如果隊列管理器在提交協議期間失去和所有資料庫管理器的聯繫,則將提供完全恢復支持。如果資料庫管理器因處於未確定狀態而變為不可用(就是說,已調用他作準備,但還要接收提交或逆序恢複決定),則隊列管理器將記住工作單元的結果,直到他被成功傳遞為止。同樣地,如果隊列管理器終止時有未完成的提交操作,那麼隊列管理器重新啟動時他們將被記住。

設備事件

  能使用 MQSeries 設備事件來監視隊列管理器的操作。

  設備事件能在隊列管理器檢測到一組預定義的情況發生時生成稱為事件消息的特別消息。例如,在以下情況時將生成隊列滿事件消息:對於指定隊列啟用了「隊列滿」事件;應用程式發出 MQPUT 調用在隊列中放入消息;並且由於隊列已滿引起調用失敗。

  其他條件也能引起設備事件,包括:

  達到隊列中消息數的預定義極限。

  在指定時間內隊列沒獲得服務。

  啟動或停止的通道實例。

  如果將事件隊列定義為遠程隊列,則可將所有事件隊列放入單個隊列管理器中(對於那些支持設備事件的節點)。然後,能從單個節點使用生成的事件監視隊列管理器的網路。

  MQSeries 設備事件分為下列幾種:

  隊列管理器事件

  這些事件和隊列管理器中的資源定義有關。例如,如果應用程式嘗試打開隊列,但關聯的用戶標識沒有經過授權執行該操作,將生成隊列管理器事件。

  性能事件

  這些是在資源達到閾值條件時將產生的通知。例如,達到隊列深度極限,或按照 MQGET 請求,在預先定義的時間內未對隊列進行服務。能使用 視窗系統 NT 性能監視器來檢查和控制隊列的某些方面(例如,隊列深度、隊列深度百分率、及有多少消息已入隊和出隊)。

  通道事件

  這些事件是由通道報告的,作為操作期間檢測條件的結果。例如,在通道實例停止時產生一個通道事件。

  消息驅動處理

  當消息到達隊列后,他們能使用一種稱為觸發的機制來自動啟動應用程式。如果必要的話,應用程式可在處理完消息后停止。

上一篇[弗里德里希·謝林]    下一篇 [MPTrim]

相關評論

同義詞:暫無同義詞