IBM Websphere MQ的原理与应用
2011-10-30岳光
岳光
民航新疆空中交通管理局气象中心,新疆 乌鲁木齐市 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、MQ的原理与体系结构
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、MQ的互联通信
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 接收方本地队列 接收方队列管理器
3、民航气象数据库系统的MQ应用实例
民航气象数据库系统的MQ应用主要是以TCP传送类型为基础,利用发送通道-接收通道(Sender-receiver)组合,通过定义本地队列、远程队列、传输队列、死信队列,使用报告(Report message) 消息,完成不同平台间的数据互联通信。以新疆空管局气象中心数据库系统为例,MQ数据流转及线路关系见图3。
4、结语
MQ 作为IBM用于通讯的中间件产品,为分布式环境下进行程序到程序之间通信提供了灵活、快速并且易于使用的解决方法,在民航气象数据库系统中有着广泛的应用。
[1]WebSphere M系Q 统管理指南.International Business Machines Corporatio第n.220版02
[2]张云勇.中间件技术原理与应用.清华大学出版社
10.3969/j.issn.1001-8972.2011.12.039