梁明炯
摘? 要:IBM WebSphere MQ是跨平臺的消息傳輸通信中間件,通過消息隊列的存儲轉(zhuǎn)發(fā)機(jī)制,實(shí)現(xiàn)各類異構(gòu)系統(tǒng)之間的數(shù)據(jù)傳輸。AIX是IBM開發(fā)的類UNIX操作系統(tǒng),性能穩(wěn)定。文章基于AIX系統(tǒng)設(shè)計并實(shí)現(xiàn)了WebSphere MQ的傳輸方案。
關(guān)鍵詞:AIX;MQ;異構(gòu)系統(tǒng);數(shù)據(jù)傳輸
中圖分類號:TP311.52? ? ? 文獻(xiàn)標(biāo)志碼:A? ? ? ? ?文章編號:2095-2945(2020)22-0010-05
Abstract: IBM WebSphere MQ is a message transmission middleware across multiple platforms that uses the store and forward mechanism of messages to achieve data transmission between heterogeneous systems. AIX is a Unix-like operating system with stable performance developed by IBM. This paper designs and implements a transmission scheme using WebSphere MQ based on AIX.
Keywords: AIX; MQ; heterogeneous systems; transmission
1 背景及意義
隨著深圳航空運(yùn)輸業(yè)的快速發(fā)展,深圳空管氣象部門與深圳機(jī)場以及各航空公司之間的數(shù)據(jù)交換需求日益增多。如何保證航空氣象資料的實(shí)時傳輸尤為關(guān)鍵。IBM的WebSphere MQ是跨平臺跨網(wǎng)絡(luò)的提供消息傳輸功能的通信中間件,是目前應(yīng)用最多的消息中間件產(chǎn)品[1][2]。AIX系統(tǒng)主要應(yīng)用在IBM RISC 6000系列小型機(jī)上[3],性能穩(wěn)定。我們基于AIX設(shè)計并實(shí)現(xiàn)了空管氣象部門與各航空公司的MQ數(shù)據(jù)傳輸系統(tǒng)。本系統(tǒng)自運(yùn)行以來非常穩(wěn)定,為各航空公司提供了可靠及時的航空氣象資料。
2 MQ方案設(shè)計
IBM WebSphere MQ實(shí)際上是基于消息隊列實(shí)現(xiàn)傳輸。應(yīng)用程序通過連接到MQ以發(fā)送或接收消息,如果連接暫時不可用,MQ會將消息排隊,并在連接重新聯(lián)機(jī)時將其轉(zhuǎn)發(fā)。MQ中主要涉及三個概念:隊列管理器、通道和隊列。隊列管理器是消息隊列的管理者,用來維護(hù)和管理消息隊列。隊列管理器確保消息可以發(fā)送至正確的隊列或傳遞至另一個隊列管理器;通道是兩個隊列管理器之間的單向通信鏈路。MQ 使用通道在隊列管理器之間傳送消息。要雙向發(fā)送消息必須定義每個方向的通道;隊列是存放消息的容器,隊列存儲消息直到它被應(yīng)用程序處理。
MQ的隊列分為4種,分別是本地隊列、傳輸隊列、遠(yuǎn)程隊列和死信隊列:(1)本地隊列是一個物理上位于本地
隊列管理器中的隊列。應(yīng)用程序可以放消息到本地隊列,也可以從本地隊列取消息;(2)傳輸隊列是特殊類型的本
地隊列。如果需發(fā)送消息到遠(yuǎn)程隊列管理器上的隊列,消息先被儲存在傳輸隊列,直到遠(yuǎn)程隊列管理器上的隊列可用;(3)遠(yuǎn)程隊列實(shí)質(zhì)上指向遠(yuǎn)程隊列管理器,程序可以向遠(yuǎn)程隊列發(fā)送消息,但不能從遠(yuǎn)程隊列中去讀取消息;(4)死信隊列是存儲無法發(fā)送到其正確目的地消息的隊列,也就是放置發(fā)送失敗的消息。
限于篇幅,只選取兩個航空公司(東海航空和深圳航空)來闡述MQ的設(shè)計方案。我們需要定義各傳輸接收方的隊列管理器、隊列以及它們之間相互傳輸?shù)耐ǖ?。這里先定義各傳輸接收方的四字代碼,以便定義MQ對象時使用:空管氣象部門KGQX、東海航空DHHK、深圳航空SZHK。因此所定義的三個隊列管理器分別是KGQX、DHHK和SZHK。
創(chuàng)建并啟動隊列管理器后,應(yīng)用程序和其他隊列管理器可以連接到它來發(fā)送和接收消息。MQ通道通過網(wǎng)絡(luò)將一個隊列管理器連接到另一個隊列管理器。MQ通道命名設(shè)計為本隊列管理器名.TO.對方隊列管理器名,例如空管氣象到東海航空的通道名為KGQX.TO.DHHK。由于傳輸?shù)臍庀筚Y料包括報文和產(chǎn)品(包括圖片等各種非報文格式資料),我們設(shè)計本地隊列LOCAL.TXT存放報文資料,本地隊列LOCAL.PRD存放產(chǎn)品資料。傳輸隊列使用對方隊列管理器命名,因?yàn)閭鬏旉犃写鎯Φ臄?shù)據(jù)是要發(fā)送到對方隊列管理器。假如一份報文需要通過隊列管理器KGQX傳到DHHK,那么消息先被存儲到本地隊列LOCAL.TXT,目標(biāo)是遠(yuǎn)程隊列TO.DHHK.TXT。然后到傳輸隊列DHHK,通過通道KGQX.TO.DHHK到達(dá)隊列管理器DHHK。氣象部門與深圳航空和東海航空的MQ設(shè)計如圖1所示。
3 MQ方案實(shí)現(xiàn)
本章首先在AIX系統(tǒng)上創(chuàng)建并配置好MQ,然后通過腳本定義好MQ各對象。
3.1 創(chuàng)建MQ文件系統(tǒng)及賬戶
首先在AIX系統(tǒng)上通過smitty創(chuàng)建相應(yīng)的文件系統(tǒng)及MQ賬戶。
(1)運(yùn)行smitty crfs命令,選擇第一項(xiàng)Add an Enhanc
ed Journaled File System。在彈出界面中,選擇datavg,在Numb of units中選擇5120,即創(chuàng)建5120MB大小的文件系統(tǒng)。在MOUNT POINT一項(xiàng)選擇/usr/mqm,即掛載點(diǎn)為/usr/mqm;在Mount AUTOMATICALLY at system restart一項(xiàng)選擇yes,即開機(jī)自動掛載文件系統(tǒng)。如圖2所示。
(2)同樣的方法創(chuàng)建/var/mqm文件系統(tǒng),容量也設(shè)置為5G。
(3)執(zhí)行mount /usr/mqm和mount /var/mqm命令,將
所創(chuàng)建的兩個文件系統(tǒng)進(jìn)行掛載。
(4)通過smitty mkgroup命令創(chuàng)建mqm用戶組,然后通過smitty mkuser命令創(chuàng)建MQ用戶。
3.2 安裝配置MQ
把MQ For AIX光盤插入CDROM中。以root用戶登錄,輸入smitty install命令進(jìn)入smitty菜單開始安裝。在SOFTWARE to install選項(xiàng)按F4,將ACCEPT new license agreements 置為yes,按回車,開始進(jìn)行MQ的安裝。如圖3所示。
安裝結(jié)束后需添加MQSeries服務(wù),步驟如下。
(1)修改/etc/services文件,在末尾添加一行:MQSeries 1414/tcp
(2)修改/etc/inetd.conf,在末尾添加一行:
MQSeries stream tcp nowait mqm /usr/mqm/bin/amqcrsta amqcrsta
(3)刷新inetd進(jìn)程:refresh -s inetd
可通過telnet localhost 1414進(jìn)行測試mq是否安裝并配置成功。
3.3 定義MQ對象
如圖1所示,在空管氣象端需要創(chuàng)建隊列管理器、2個本地隊列、2個傳輸隊列、4個遠(yuǎn)程隊列、1個死信隊列以及4個通道。
3.3.1 定義隊列管理器
這里創(chuàng)建一個缺省的隊列管理器KGQX,如表1。其中,-lf 表示隊列管理器日志文件大小,-lp 20 -ls 2表示日志指定為20個主擴(kuò)展和2個次擴(kuò)展,-q 選項(xiàng)表示缺省的隊列管理器名稱。maxmsgl(15728640)表示修改隊列管理器的最大消息長度(單位為字節(jié)),這里實(shí)際消息長度為15728640/1024/1024=15M。
3.3.2 定義本地隊列
共需要定義兩個本地隊列LOCAL.TXT和LOCAL.PRD,如表2。其中,DEFPSIST屬性表示隊列消息的持久性(值為YES則隊列管理器重啟時消息不會丟失),MAXMSGL表示隊列管理器最大消息長度,MAXDEPTH表示隊列上允許的最大消息數(shù)。
3.3.3 定義傳輸隊列
隊列管理器KGQX中共需要定義兩個傳輸隊列SZHK和DHHK,分別對應(yīng)深圳航空和東海航空,如表3。每個傳輸隊列同時保存報文和產(chǎn)品。USAGE(XMITQ)參數(shù)為“XMITQ”,表示指定本隊列為傳輸隊列。
3.3.4 定義遠(yuǎn)程隊列
每個遠(yuǎn)程隊列對應(yīng)于發(fā)往一個航空公司的報文或者產(chǎn)品。RNAME和RQMNAME中的參數(shù)需與遠(yuǎn)程隊列管理器中的本地隊列名或者遠(yuǎn)程隊列管理器名相同,如表4。
3.3.5 定義死信隊列
隊列管理器KGQX中需定義一個死信隊列KGQX.DEADQ,其中參數(shù)KGQX.DEADQ表示本隊列為死信隊列,如表5。
3.3.6 定義消息通道
隊列管理器KGQX需接收深圳航空隊列管理器SZHK和東海航空隊列管理器DHHK發(fā)送的消息,接收通道名為SZHK.TO.KGQX和DHHK.TO.KGQX,如表6。其中,參數(shù)RCVR指定通道類型為接收類型。BATCHSZ(5)表示批處理大小,當(dāng)發(fā)送的消息個數(shù)達(dá)到5,通道將統(tǒng)一提交消息。
還需定義到SZHK和DHHK的消息發(fā)送通道KGQX.TO.SZHK和KGQX.TO.DHHK,如表7所示。這里IP1和IP2表示對方MQ服務(wù)器的IP地址。
4 結(jié)束語
本文通過WebSphere MQ設(shè)計并實(shí)現(xiàn)了用于深圳空管氣象部門與航空公司之間的數(shù)據(jù)傳輸系統(tǒng)。系統(tǒng)自上線之日起不間斷運(yùn)行,表現(xiàn)出穩(wěn)定的傳輸性能。這有效保證了深圳空管氣象部門與各航空公司之間安全可靠的數(shù)據(jù)交換,為深圳航空運(yùn)輸業(yè)的發(fā)展保駕護(hù)航。
參考文獻(xiàn):
[1]馬越,羅漢文.WebSphere MQ在零售業(yè)系統(tǒng)數(shù)據(jù)傳輸中的應(yīng)用[J].上海師范大學(xué)學(xué)報(自然科學(xué)版),2017,46(01):1-9.
[2]于巖.基于Websphere MQ搭建高可用消息傳輸隊列[J].電腦知識與技術(shù),2015,11(19):76-77.
[3]張黎.基于AIX操作系統(tǒng)的銀行中間業(yè)務(wù)平臺的開發(fā)與應(yīng)用研究[D].江漢大學(xué),2018.