楊超
摘要:IBM MQSeries通信中間件概念和技術(shù)介紹,并結(jié)合實際應用場景簡要說明。
關(guān)鍵詞:MQ;中間件;隊列
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2014)35-8576-02
Brief Introduction of IBM MQSeries Communication Middleware Technology and its Application
YANG Chao
(Guangdong Postal Information Technology Bureau Development Department of Guangdong, Guangzhou 510898, China)
Abstract: The IBM MQSeries communication middleware concept and technology is introduced, and combining the practical application scene briefly.
Key words: MQ; middleware; queue
IBM MQSeries是IBM的商業(yè)通訊中間鍵。IBM MQSeries提供一個具有工業(yè)標準、安全、可靠的信息傳輸系統(tǒng)。它以消息為載體,以隊列為媒介進行本地、遠程以及跨平臺的信息傳遞。隨著計算機網(wǎng)絡技術(shù)的發(fā)展和分布式計算機系統(tǒng)的應用,信息系統(tǒng)間的數(shù)據(jù)交換已經(jīng)成為不可或缺的組成部分,商業(yè)中間鍵在此基礎(chǔ)上應運而生,它既可以保證消息傳輸?shù)目煽啃浴⒏咝屎桶踩?,同時可以替代系統(tǒng)通信模塊,進而大幅度減少系統(tǒng)的開發(fā)周期,使設計人員將精力更多的放到業(yè)務邏輯和數(shù)據(jù)邏輯的設計上。該文就MQSeries的工作原理和在廣東省的業(yè)務應用做一個簡單的介紹。
1 IBM MQSeries工作原理
MQSeries為程序提供了一種安全可靠的通信模式,支持本地應用和分布應用,本地應用可以提供一臺物理主機上的不同應用程序之間相互通信;分布應用可以提供聯(lián)網(wǎng)的主機上不同應用程序之間相互通信。MQSeries為應用程序提供了一種可靠的通信機制,不管是本地應用還是分布應用,參與通信的應用程序之間無需關(guān)注網(wǎng)絡通信模塊的實現(xiàn),發(fā)送方將數(shù)據(jù)組裝成消息,放入消息隊列,接收方從消息隊列中獲取消息,從而完成一次通信過程。隊列管理器負責MQSeries內(nèi)部對象的管理、通信鏈路的維護以及消息傳遞的可靠性和完整性。
MQSeries的消息傳遞模式見圖1:
程序A要和程序B需要交換數(shù)據(jù),程序A把數(shù)據(jù)封裝成一個消息并放入隊列1中,程序B從隊列1中以先進先出的順序取出消息,處理完成后將應答消息放入隊列2中,程序A同樣以先進先出的順序從隊列2中取出應答消息,從而完成了一次數(shù)據(jù)交換。
MQSeries本地應用模式:
和本地應用情況不同的是:這里需要兩個隊列管理器QM1和QM2協(xié)同工作,消息從本地系統(tǒng)(Local System)上放入本地的隊列管理器QM1的遠程隊列(Remote Queue),遠程隊列是一個虛擬隊列,實際上消息是放在本地的傳輸隊列(Transmission Queue)中,QM1將消息通過通道(Message Channel)傳輸?shù)竭h程系統(tǒng)上的隊列管理器QM2的本地隊列中,遠程系統(tǒng)(Remote System)就可以從QM2的目的隊列(Destination Queue)中接收來自本地系統(tǒng)的消息了,這樣就完成了本地系統(tǒng)和遠程系統(tǒng)的一次消息交互。由于MQ是跨平臺中間件,本地和遠程可以是兩種不同的操作系統(tǒng)。
在MQSeries的支持下,應用程序之間交換數(shù)據(jù)和傳統(tǒng)方式有了很大的不同,通信過程變得更為簡單和易于移植,無需關(guān)注對方應用的部署位置,隊列管理器負責消息的本地存儲和網(wǎng)絡傳遞。
2 MQSeries組成模塊
IBM MQSeries的消息傳輸系統(tǒng)由以下模塊組成:
1) 隊列管理器:管理所有消息傳遞要素,實現(xiàn)消息的網(wǎng)絡層傳遞,保證消息的傳遞安全可靠。
2) 隊列:存放應用程序之間傳遞的消息,消息以先進先出的順序被放入和取出,隊列分為本地隊列和遠程隊列兩種。
3) 本地隊列:它是一個實體隊列,可以最大程度地保證放入隊列的消息的完整性,即使系統(tǒng)斷電消息也不會丟失。
4) 遠程隊列:它是一個映射隊列,定義了分布應用場景下遠端隊列管理器中的接收隊列。
5) 傳輸隊列:它是一個本地隊列,和遠程隊列綁定,保存了將要發(fā)送到遠端的消息。
6) 死信隊列:它是一個本地隊列,用于存放異常條件下無法傳遞的消息。
7) 發(fā)送/接收通道:在兩個不同系統(tǒng)上隊列管理器之間的專用數(shù)據(jù)傳輸鏈路,和遠程隊列綁定,消息通過通道進行系統(tǒng)間相互傳遞,通道計數(shù)器為當前通道上傳遞的消息個數(shù)。
8) 應用程序接口:應用程序或信息系統(tǒng)操作MQSeries模塊的函數(shù)API接口。
分布應用模式下IBM MQSeries消息的傳遞過程如下:
1) 發(fā)送消息時:
本地發(fā)送隊列→本地傳輸隊列→本地發(fā)送通道→對方接收通道→對方接收隊列。
2) 接收消息時:
對方發(fā)送隊列→對方傳輸隊列→對方發(fā)送通道→本地接收通道→本地接收隊列。
IBM MQSeries文件的傳遞:
IBM MQSeries可以通過將文件拆分成消息一條條發(fā)送出去,對方收到消息后將消息內(nèi)容寫入目的文件,從而實現(xiàn)文件的發(fā)送過程,這個過程需要自己編寫庫函數(shù),將庫函數(shù)配置到本地發(fā)送通道和對方接收通道的“消息出口名稱”屬性中,MQ自動進行調(diào)用。
3 MQSeries MQI簡介
MQSeries提供了一套應用開發(fā)接口MQI給應用程序調(diào)用。圖4顯示了MQI的調(diào)用流程。
1) MQCONN建立和隊列管理器的連接,調(diào)用成功后返回一個操作句柄,通過句柄可以進行隊列的操作。
2) MQOPEN打開一個隊列,隊列必須是調(diào)用MQCONN所連接的隊列管理器管轄的范圍,隊列可以是本地隊列和遠程隊列。
3) 調(diào)用MQPUT 向隊列中存放消息;調(diào)用MQGET 從隊列中獲取消息;調(diào)用MQINQ獲得當前打開隊列的屬性;調(diào)用MQSET改變當前打開隊列的屬性。
4) MQPUT1是一個操作集合,它順序執(zhí)行了三個函數(shù)調(diào)用,首先調(diào)用MQOPEN 打開一個隊列,然后調(diào)用MQPUT 向隊列中放入消息,最后調(diào)用 MQCLOSE 關(guān)閉當前隊列。
5) MQCLOSE關(guān)閉已打開隊列
6) MQDISC斷開和當前隊列管理器的連接。
具體操作過程中MQCONN和MQDISC通常為應用程序啟動和停止時進行一次調(diào)用,應用程序運行過程中只需要不斷調(diào)用隊列操作MQI即可。
4 MQSeries在廣東省電信的應用
MQ在廣東省電信繳費系統(tǒng)的郵儲方配置如上圖所示,按照配置可以分為三類:一類是郵儲主動發(fā)起業(yè)務,比如欠費查詢、繳費;一類是電信主動發(fā)起業(yè)務,比如主動扣費;一類是文件收發(fā),比如對賬文件、批扣文件。三類業(yè)務分別使用獨立的發(fā)送隊列、接收隊列、傳輸隊列、發(fā)送通道和接收通道,三類業(yè)務邏輯清晰互不干擾,維護起來非常方便。
綜上所述MQ相當于實現(xiàn)了一個異步單工長連接的通信模式,是分布應用或者異構(gòu)系統(tǒng)之間的消息傳遞的一個很好的選擇。
參考文獻:
[1] IBM developerWorks技術(shù)專題(搜索“MQ”關(guān)鍵詞):為您提供 WebSphere MQ 最新的文章、教程等技術(shù)資源.