岳光
民航新疆空中交通管理局氣象中心,新疆 烏魯木齊市 830016
IBM Websphere MQ的原理與應用
岳光
民航新疆空中交通管理局氣象中心,新疆 烏魯木齊市 830016
本文闡述了IBM Websphere的 MQ原理, 分析了MQ互聯通信技術,對MQ在氣象數據庫系統中的應用進行了說明。
IBM Websphere; MQ消息;隊列管理器;氣象數據庫系統
計算機軟件發展到今天,很多具有獨立功能的應用模塊都被逐漸隔離出來形成軟件產品,這些軟件往往是針對某一種應用需求,在相關的領域中具有很強的通用性。它們通常介于操作系統和應用程序之間,為應用程序提供一些標準的服務,我們稱這一類軟件為中間件。中間件有消息中間件、交易中間件、對象中間件等不同種類。其中,消息中間件適用于任何需要進行網絡通信的系統,負責建立網絡通信的通道,進行數據或文件的發送。
消息中間件的典型產品是 I B M Websphere MQ(MQ代表Message Queue),以下簡稱MQ,主要功能是在應用程序之間傳送消息。這些消息可以在不同的網絡協議、不同的計算機系統和不同的應用軟件之間傳遞,并能保證消息傳輸的可靠性、高效率和安全性,同時也減少了系統的開發周期。MQ支持35種IBM和非IBM平臺,為不同操作系統上的應用軟件集成提供服務。
1.1 MQ原理
MQ為應用程序提供一種跨越網絡通訊的特殊機制,參與通訊的應用程序之間不需要建立私有的、專用的邏輯連接,發送方把數據組裝成消息,放入消息隊列中,接收方從消息隊列中取出消息,達到通信的目的。MQ支持應用程序交換數據的基本機制是消息與隊列。
MQ程序A與程序B要交換數據,A先把數據組織成一個稱為消息的數據包,放入隊列中。隊列是由隊列管理器管理的一個數據文件,由隊列管理器保證放在隊列中的消息的完整性和可恢復性,即消息放入隊列后,即使由于斷電或硬盤故障等引起系統崩潰,重新啟動后,MQ的恢復機制仍能保證消息完整。程序B從隊列中讀出程序A放入的消息,接收到由程序A送來的數據。如果程序B有應答數據回送給程序A, 同樣組織好一條消息,放入應答隊列中讓程序A讀取。 在MQ的支持下,應用程序之間的數據交換與傳統方式最大的不同是:通訊不再是程序A與B直接連接,而是引入第三個程序,一個隊列管理器作為中介。

圖1 新疆空管局氣象中心 MQ的數據流轉及線路關系
隊列管理器是一個能管理多個隊列及其他與數據交換相關的部件的管理程序,協調各部件間的運作和保證數據的完整性。隊列管理器提供一套應用開發接口MQI給應用程序,應用程序A用這套接口中的MQPUT調用放消息入隊列Q1中,應用程序B調用MQGET從隊列Q1中讀到該消息。
1.2 MQ的體系結構
MQ體系結構簡單來說,是由一個消息傳輸系統和一個應用程序接口組成,其基本資源是消息(Message)和隊列(Queue)
消息傳輸系統:用于確保隊列之間的消息提供,包括網絡中不同系統上的遠程隊列之間的消息提供;并保證網絡故障或關閉后的恢復。
應用程序接口:實現應用程序和MQ隊列之間的消息存取或交換。涉及13個API調用,2個關鍵動詞:發送(P U T)和接收(GET)。具體的API調用如下:
隊列管理器連接和斷開連接:
MQCONN,MQCONNX 和MQDISC
打開和關閉MQ 對象:MQOPEN 和MQCLOSE
將一個或多個消息放入隊列:MQPUT和MQPUT1
從隊列中瀏覽消息或刪除消息:MQGET
查詢MQ對象屬性:MQINQ
運行時間內設定某些隊列屬性:MQSET
管理局部或分布式事務處理:
MQBEGIN,MQCMIT 和MQBACK
2.1 MQ雙向通信傳輸
下面是一個NT和AIX系統之間的雙向MQ通信傳輸示例。
2.2 MQ通信的實現
2.2.1 準備工作
檢查發送方和接收方的通信鏈路
啟動發送方和接收方的隊列管理器
啟動發送方的通道
啟動接收方的偵聽程序
在發送方上隊列管理器中定義如下對象:發送通道、遠程隊列、傳輸隊列、死信隊列 。
在接收方隊列管理器中定義如下對象:接收通道、目標隊列(或接收隊列)、死信隊列。
2.2.2 偵聽的兩種啟動方式(任選其一)
WebSphere MQ偵聽程序(通用配置)
把通道作為一個線程運行,使用runmqlsr 命令,例如:
runmqlsr -t tcp [-m QMNAME] [-p 1822]
方括號中的參數是可選的。如果使用缺省隊列管理器,則不用說明QMNAME;如果使用缺省端口號1414,則也不用設置端口號的參數。
TCP/IP 偵聽程序 (AIX上按如下配置)
編輯/etc/services 文件,在文件中增加如下一行:
MQSeries 1414/tcp , 1414表示偵聽端口號,可以選擇其它未使用的端口號。
編輯/etc/inetd.conf 文件,在文件中增加如下一行:
MQSeries stream tcp nowait mqm / usr/mqm/bin/amqcrsta amqcrsta [-m Queue_Man_Name]
為了使修改配置生效,需要用root用戶執行如下命令: refresh -s inetd
2.2.3 MQ測試驗證
用mqm用戶,通過系統自帶的amqsput和amqsget程序(在AIX上的位置: /usr/ mqm/samp/bin;在LINUX上的位置:/ opt/mqm/samp/bin)進行驗證。
命令格式如下:
amqsput 發送方遠程隊列 發送方隊列管理器
amqsget 接收方本地隊列 接收方隊列管理器
民航氣象數據庫系統的MQ應用主要是以TCP傳送類型為基礎,利用發送通道-接收通道(Sender-receiver)組合,通過定義本地隊列、遠程隊列、傳輸隊列、死信隊列,使用報告(Report message) 消息,完成不同平臺間的數據互聯通信。以新疆空管局氣象中心數據庫系統為例,MQ數據流轉及線路關系見圖3。
MQ 作為IBM用于通訊的中間件產品,為分布式環境下進行程序到程序之間通信提供了靈活、快速并且易于使用的解決方法,在民航氣象數據庫系統中有著廣泛的應用。
[1]WebSphere M系Q 統管理指南.International Business Machines Corporatio第n.220版02
[2]張云勇.中間件技術原理與應用.清華大學出版社
10.3969/j.issn.1001-8972.2011.12.039