MQ的基本概念:

 

1) 隊列管理器

 

隊列管理器是MQ系統中最上層的一個概念,由它為我們提供基於隊列的消息服務。

 

2) 消息

 

在MQ中,我們把應用程式交由MQ傳輸的數據定義為消息,我們可以定義消息的內容並對消息進行廣義的理解,比如:用戶的各種類型的數據檔,某個應用向其它應用發出的處理請求等都可以作為消息。消息有兩部分組成:

 

消息描述項(Message Discription或Message Header),描述消息的特徵,如:消息的優先級、生命週期、消息Id等;

 

消息體(Message Body),即用戶數據部分。在MQ中,消息分為兩種類型,非永久性(non-persistent)消息和永久性(persistent)消息,非永久性消息是存儲在內存中的,它是為了提高性能而設計的,當系統掉電或MQ隊列管理器重新啟動時,將不可恢復。當用戶對消息的可靠性要求不高,而側重系統的性能表現時,可以採用該種類型的消息,如:當發布股票資訊時,由於股票資訊是不斷更新的,我們可能每若幹秒就會發布一次,新的消息會不斷覆蓋舊的消息。永久性消息是存儲在硬盤上,並且紀錄數據日誌的,它具有高可靠性,在網絡和系統發生故障等情況下都能確保消息不丟、不重。

 

此外,在MQ中,還有邏輯消息和物理消息的概念。利用邏輯消息和物理消息,我們可以將大消息進行分段處理,也可以將若幹個本身完整的消息在應用邏輯上歸為一組進行處理。

 

3) 隊列

 

隊列是消息的安全存放地,隊列存儲消息直到它被應用程式處理。

 

消息隊列以下述方式工作:

 

a) 程式A形成對消息隊列系統的調用,此調用告知消息隊列系統,消息准備好了投向程式B;

 

b) 消息隊列系統發送此消息到程式B駐留處的系統,並將它放到程式B的隊列中;

 

c) 適當時間後,程式B從它的隊列中讀此消息,並處理此資訊。

 

由於採用了先進的程式設計思想以及內部工作機制,MQ能夠在各種網絡條件下保證消息的可靠傳遞,可以克服網絡線路質量差或不穩定的現狀,在傳輸過程中,如果通信線路出現故障或遠端的主機發生故障,本地的應用程式都不會受到影響,可以繼續發送數據,而無需等待網絡故障恢復或遠端主機正常後再重新運行。

 

在MQ中,隊列分為很多種類型,其中包括:本地隊列、遠程隊列、範本隊列、動態隊列、別名隊列等。

 

本地隊列又分為普通本地隊列和傳輸隊列,普通本地隊列是應用程式通過API對其進行讀寫操作的隊列;傳輸隊列可以理解為存儲-轉發隊列,比如:我們將某個消息交給MQ系統發送到遠程主機,而此時網絡發生故障,MQ將把消息放在傳輸隊列中暫存,當網絡恢復時,再發往遠端目的地。

 

遠程隊列是目的隊列在本地的定義,它類似一個位址指針,指向遠程主機上的某個目的隊列,它僅僅是個定義,不真正佔用磁盤存儲空間。

 

範本隊列和動態隊列是MQ的一個特色,它的一個典型用途是用作系統的可擴展性考慮。我們可以創建一個範本隊列,當今後需要新增隊列時,每打開一個範本隊列,MQ便會自動生成一個動態隊列,我們還可以指定該動態隊列為臨時隊列或者是永久隊列,若為臨時隊列我們可以在關閉它的同時將它刪除,相反,若為永久隊列,我們可以將它永久保留,為我所用。

 

4) 通道

 

通道是MQ系統中隊列管理器之間傳遞消息的管道,它是建立在物理的網絡連接之上的一個邏輯概念,也是MQ產品的精華。

 

在MQ中,主要有三大類通道類型,即消息通道,MQI通道和Cluster通道。消息通道是用於在MQ的服務器和服務器之間傳輸消息的,需要強調指出的是,該通道是單向的,它又有發送(sender), 接收(receive), 請求者(requestor), 服務者(server)等不同類型,供用戶在不同情況下使用。MQI通道是MQ Client和MQ Server之間通訊和傳輸消息用的,與消息通道不同,它的傳輸是雙向的。群集(Cluster)通道是位於同一個MQ 群集內部的隊列管理器之間通訊使用的。


 

--------------------------------------------------------------------------------
MQ的工作原理

 

如圖所示:

 

首先來看本地通訊的情況,應用程式A和應用程式B運行於同一系統A,它們之間可以借助消息隊列技術進行彼此的通訊:應用程式A向隊列1發送一條資訊,而當應用程式B需要時就可以得到該資訊。

 

其次是遠程通訊的情況,如果資訊傳輸的目標改為在系統B上的應用程式C,這種變化不會對應用程式A產生影響,應用程式A向隊列2發送一條資訊,系統A的MQ發現Q2所指向的目的隊列實際上位於系統B,它將資訊放到本地的一個特殊隊列-傳輸隊列(Transmission Queue)。我們建立一條從系統A到系統B的消息通道,消息通道代理將從傳輸隊列中讀取消息,並傳遞這條資訊到系統B,然後等待確認。只有MQ接到系統B成功收到資訊的確認之後,它才從傳輸隊列中真正將該資訊刪除。如果通訊線路不通,或系統B不在運行,資訊會留在傳輸隊列中,直到被成功地傳送到目的地。這是MQ最基本而最重要的技術--確保資訊傳輸,並且是一次且僅一次(once-and-only-once)的傳遞。

 

MQ提供了用於應用集成的松耦合的連接方法,因為共用資訊的應用不需要知道彼此物理位置(網絡位址);不需要知道彼此間怎樣建立通信;不需要同時處於運行狀態;不需要在同樣的操作系統或網絡環境下運行。


 

--------------------------------------------------------------------------------
MQ的基本配置舉例

 

在上圖中,要實現網絡上兩台主機上的通訊,若採用點對點的通訊方式,我們至少要建立如下MQ的對象:

 

在發送方A:

 

1) 建立隊列管理器QMA: crtmqm -q QMA

 

2) 定義本地傳輸隊列: define qlocal (QMB) usage (xmitq) defpsist(yes)

 

3) 創建遠程隊列: define qremote (QR.TOB) rname (LQB) rqmname (QMB) xmitq (QMB)

 

4) 定義發送通道: define channel (A.TO.B) chltype (sdr) conname ('IP of B') xmitq (QMB) + trptype (tcp)

 

在接收方B:

 

1) 建立隊列管理器QMB: crtmqm -q QMB

 

2) 定義本地隊列QLB: define qlocal (LQB)

 

3) 創建接收通道: define channel (A.TO.B) chltype (rcvr) trptype (tcp)

 

經過上述配置,我們就可以實現從主機A到B的單向通訊,若要實現二者之間的雙向通訊,可參考此例創建所需要的MQ對象。


 

--------------------------------------------------------------------------------
MQ的通訊模式

 

1) 點對點通訊:點對點方式是最為傳統和常見的通訊方式,它支援一對一、一對多、多對多、多對一等多種配置方式,支援樹狀、網狀等多種拓撲結構。

 

2) 多點廣播:MQ適用於不同類型的應用。其中重要的,也是正在發展中的是"多點廣播"應用,即能夠將消息發送到多個目標站點(Destination List)。可以使用一條MQ指令將單一消息發送到多個目標站點,並確保為每一站點可靠地提供資訊。MQ不僅提供了多點廣播的功能,而且還擁有智慧消息分發功能,在將一條消息發送到同一系統上的多個用戶時,MQ將消息的一個複製版本和該系統上接收者的名單發送到目標MQ系統。目標MQ系統在本地複製這些消息,並將它們發送到名單上的隊列,從而盡可能減少網絡的傳輸量。

 

3) 發布/訂閱(Publish/Subscribe)模式:發布/訂閱功能使消息的分發可以突破目的隊列地理指向的限制,使消息按照特定的主題甚至內容進行分發,用戶或應用程式可以根據主題或內容接收到所需要的消息。發布/訂閱功能使得發送者和接收者之間的耦合關系變得更為鬆散,發送者不必關心接收者的目的位址,而接收者也不必關心消息的發送位址,而只是根據消息的主題進行消息的收發。在MQ家族產品中,MQ Event Broker是專門用於使用發布/訂閱技術進行數據通訊的產品,它支援基於隊列和直接基於TCP/IP兩種方式的發布和訂閱。

 

4) 群集(Cluster):為了簡化點對點通訊模式中的系統配置,MQ提供Cluster(群集)的解決方案。群集類似於一個域(Domain),群集內部的隊列管理器之間通訊時,不需要兩兩之間建立消息通道,而是採用群集(Cluster)通道與其它成員通訊,從而大大簡化了系統配置。此外,群集中的隊列管理器之間能夠自動進行負載均衡,當某一隊列管理器出現故障時,其它隊列管理器可以接管它的工作,從而大大提高系統的高可靠性。


 

MQ Server和MQ Client

 

MQ產品分為Server和Client 兩種版本,在MQ服務器的運行環境下,有隊列管理器、隊列、消息通道等對象,它提供全面的消息服務;MQ Client為我們提供了一個MQ應用程式的開發和運行環境,它是MQ API的Client實現。在客戶端環境下,沒有隊列管理器、隊列等對象,它通過MQI通道與服務器之間建立通訊,並將消息從客戶端發往服務器端的隊列,或從Server端的隊列中取得消息,它比較適合於網絡條件較好或實時通訊的情況。同時要指出的是:採用MQ Client並不會導致數據的丟失或不完整性。MQ Client提供下列好處:適合同步處理的工作模式;減少系統負擔;減少系統管理開銷;減少磁盤空間要求等。


 

--------------------------------------------------------------------------------
MQ的API

 

MQ支援多種編程語言,其中包括:C、C++、JAVA、VisualBasic、COBOL、PL/1、RPG等,同時也支援多種流行的開發工具,如:WebSphere Studio Application Developer, PowerBuiler、Microsoft Visual C++、Visual Basic、Delphi等。並且,MQ在不同平臺上提供統一的編程介面,僅需重新編譯就可完成不同平臺間程式的移植。MQ的API介面十分簡單易學,用戶僅需利用MQ的13個常用而又功能強大的函數調用,便可以以最快的速度,寫出各種複雜的應用程式。用戶可以將主要精力集中於應用業務邏輯的實現,而不是底層通訊、例外處理等方面。

 

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()