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