消息隊列技術是分佈式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。經過消息隊列,應用程序可獨立地執行--它們不須要知道彼此的位置、或在繼續執行前不須要等待接收程序接收此消息。git
消息中間件概述編程
消息隊列技術是分佈式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。經過消息隊列,應用程序可獨立地執行--它們不須要知道彼此的位置、或在繼續執行前不須要等待接收程序接收此消息。安全
在分佈式計算環境中,爲了集成分佈式應用,開發者須要對異構網絡環境下的分佈式應用提供有效的通訊手段。爲了管理須要共享的信息,對應用提供公共的信息交換機制是重要的。服務器
設計分佈式應用的方法主要有:遠程過程調用(PRC)--分佈式計算環境(DCE)的基礎標準成分之一;對象事務監控(OTM)--基於CORBA的面向對象工業標準與事務處理(TP)監控技術的組合;消息隊列(MessageQueue)--構造分佈式應用的鬆耦合方法。網絡
(a) 分佈計算環境/遠程過程調用 (DCE/RPC)負載均衡
RPC是DCE的成分,是一個由開放軟件基金會(OSF)發佈的應用集成的軟件標準。RPC模仿一個程序用函數引用來引用另外一程序的傳統程序設計方法,此引用是過程調用的形式,一旦被調用,程序的控制則轉向被調用程序。異步
在RPC實現時,被調用過程可在本地或遠地的另外一系統中駐留並在執行。當被調用程序完成處理輸入數據,結果放在過程調用的返回變量中返回到調用程序。RPC完成後程序控制則當即返回到調用程序。所以RPC模仿子程序的調用/返回結構,它僅提供了Client(調用程序)和Server(被調用過程)間的同步數據交換。socket
(b) 對象事務監控 (OTM)tcp
基於CORBA的面向對象工業標準與事務處理(TP)監控技術的組合,在CORBA規範中定義了:使用面向對象技術和方法的體系結構;公共的Client/Server程序設計接口;多平臺間傳輸和翻譯數據的指導方針;開發分佈式應用接口的語言(IDL)等,併爲構造分佈的Client/Server應用提供了普遍及一致的模式。分佈式
(c) 消息隊列 (Message Queue)
消息隊列爲構造以同步或異步方式實現的分佈式應用提供了鬆耦合方法。消息隊列的API調用被嵌入到新的或現存的應用中,經過消息發送到內存或基於磁盤的隊列或從它讀出而提供信息交換。消息隊列可用在應用中以執行多種功能,好比要求服務、交換信息或異步處理等。
中間件是一種獨立的系統軟件或服務程序,分佈式應用系統藉助這種軟件在不一樣的技術之間共享資源,管理計算資源和網絡通信。它在計算機系統中是一個關鍵軟件,它能實現應用的互連和互操做性,能保證系統的安全、可靠、高效的運行。中間件位於用戶應用和操做系統及網絡軟件之間,它爲應用提供了公用的通訊手段,而且獨立於網絡和操做系統。中間件爲開發者提供了公用於全部環境的應用程序接口,當應用程序中嵌入其函數調用,它即可利用其運行的特定操做系統和網絡環境的功能,爲應用執行通訊功能。
若是沒有消息中間件完成信息交換,應用開發者爲了傳輸數據,必需要學會如何用網絡和操做系統軟件的功能,編寫相應的應用程序來發送和接收信息,且交換信息沒有標準方法,每一個應用必須進行特定的編程從而和多平臺、不一樣環境下的一個或多個應用通訊。例如,爲了實現網絡上不一樣主機系統間的通訊,將要求具有在網絡上如何交換信息的知識(好比用TCP/IP的socket程序設計);爲了實現同一主機內不一樣進程之間的通信,將要求具有操做系統的消息隊列或命名管道(Pipes)等知識。
目前中間件的種類不少,如交易管理中間件(如IBM的CICS)、面向Java應用的Web應用服務器中間件(如IBM的WebSphere Application Server)等,而消息傳輸中間件(MOM)是其中的一種。它簡化了應用之間數據的傳輸,屏蔽底層異構操做系統和網絡平臺,提供一致的通信標準和應用開發,確保分佈式計算網絡環境下可靠的、跨平臺的信息傳輸和數據交換。它基於消息隊列的存儲-轉發機制,並提供特有的異步傳輸機制,可以基於消息傳輸和異步事務處理實現應用整合與數據交換。
IBM 消息中間件MQ以其獨特的安全機制、簡便快速的編程風格、卓越不凡的穩定性、可擴展性和跨平臺性,以及強大的事務處理能力和消息通信能力,成爲業界市場佔有率最高的消息中間件產品。
MQ具備強大的跨平臺性,它支持的平臺數多達35種。它支持各類主流Unix操做系統平臺,如:HP-UX、AIX、SUN Solaris、Digital UNIX、Open VMX、SUNOS、NCR UNIX;支持各類主機平臺,如:OS/390、MVS/ESA、VSE/ESA;一樣支持Windows NT服務器。在PC平臺上支持Windows9X/Windows NT/Windows 2000和UNIX (UnixWare、Solaris)以及主要的Linux版本(Redhat、TurboLinux等)。此外,MQ還支持其餘各類操做系統平臺,如:OS/二、AS/400、Sequent DYNIX、SCO OpenServer、SCO UnixWare、Tandem等。
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和MQI通道是MQ Client和MQ Server之間通信和傳輸消息用的,與消息通道不一樣,它的傳輸是雙向的。羣集(Cluster)通道是位於同一個MQ 羣集內部的隊列管理器之間通信使用的。