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