APP下载

IBM MQSeries通信中间件技术及应用简介

2014-12-31杨超

电脑知识与技术 2014年35期

杨超

摘要:IBM MQSeries通信中间件概念和技术介绍,并结合实际应用场景简要说明。

关键词:MQ;中间件;队列

中图分类号:TP393 文献标识码:A 文章编号: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的商业通讯中间键。IBM MQSeries提供一个具有工业标准、安全、可靠的信息传输系统。它以消息为载体,以队列为媒介进行本地、远程以及跨平台的信息传递。随着计算机网络技术的发展和分布式计算机系统的应用,信息系统间的数据交换已经成为不可或缺的组成部分,商业中间键在此基础上应运而生,它既可以保证消息传输的可靠性、高效率和安全性,同时可以替代系统通信模块,进而大幅度减少系统的开发周期,使设计人员将精力更多的放到业务逻辑和数据逻辑的设计上。该文就MQSeries的工作原理和在广东省的业务应用做一个简单的介绍。

1 IBM MQSeries工作原理

MQSeries为程序提供了一种安全可靠的通信模式,支持本地应用和分布应用,本地应用可以提供一台物理主机上的不同应用程序之间相互通信;分布应用可以提供联网的主机上不同应用程序之间相互通信。MQSeries为应用程序提供了一种可靠的通信机制,不管是本地应用还是分布应用,参与通信的应用程序之间无需关注网络通信模块的实现,发送方将数据组装成消息,放入消息队列,接收方从消息队列中获取消息,从而完成一次通信过程。队列管理器负责MQSeries内部对象的管理、通信链路的维护以及消息传递的可靠性和完整性。

MQSeries的消息传递模式见图1:

程序A要和程序B需要交换数据,程序A把数据封装成一个消息并放入队列1中,程序B从队列1中以先进先出的顺序取出消息,处理完成后将应答消息放入队列2中,程序A同样以先进先出的顺序从队列2中取出应答消息,从而完成了一次数据交换。

MQSeries本地应用模式:

和本地应用情况不同的是:这里需要两个队列管理器QM1和QM2协同工作,消息从本地系统(Local System)上放入本地的队列管理器QM1的远程队列(Remote Queue),远程队列是一个虚拟队列,实际上消息是放在本地的传输队列(Transmission Queue)中,QM1将消息通过通道(Message Channel)传输到远程系统上的队列管理器QM2的本地队列中,远程系统(Remote System)就可以从QM2的目的队列(Destination Queue)中接收来自本地系统的消息了,这样就完成了本地系统和远程系统的一次消息交互。由于MQ是跨平台中间件,本地和远程可以是两种不同的操作系统。

在MQSeries的支持下,应用程序之间交换数据和传统方式有了很大的不同,通信过程变得更为简单和易于移植,无需关注对方应用的部署位置,队列管理器负责消息的本地存储和网络传递。

2 MQSeries组成模块

IBM MQSeries的消息传输系统由以下模块组成:

1) 队列管理器:管理所有消息传递要素,实现消息的网络层传递,保证消息的传递安全可靠。

2) 队列:存放应用程序之间传递的消息,消息以先进先出的顺序被放入和取出,队列分为本地队列和远程队列两种。

3) 本地队列:它是一个实体队列,可以最大程度地保证放入队列的消息的完整性,即使系统断电消息也不会丢失。

4) 远程队列:它是一个映射队列,定义了分布应用场景下远端队列管理器中的接收队列。

5) 传输队列:它是一个本地队列,和远程队列绑定,保存了将要发送到远端的消息。

6) 死信队列:它是一个本地队列,用于存放异常条件下无法传递的消息。

7) 发送/接收通道:在两个不同系统上队列管理器之间的专用数据传输链路,和远程队列绑定,消息通过通道进行系统间相互传递,通道计数器为当前通道上传递的消息个数。

8) 应用程序接口:应用程序或信息系统操作MQSeries模块的函数API接口。

分布应用模式下IBM MQSeries消息的传递过程如下:

1) 发送消息时:

本地发送队列→本地传输队列→本地发送通道→对方接收通道→对方接收队列。

2) 接收消息时:

对方发送队列→对方传输队列→对方发送通道→本地接收通道→本地接收队列。

IBM MQSeries文件的传递:

IBM MQSeries可以通过将文件拆分成消息一条条发送出去,对方收到消息后将消息内容写入目的文件,从而实现文件的发送过程,这个过程需要自己编写库函数,将库函数配置到本地发送通道和对方接收通道的“消息出口名称”属性中,MQ自动进行调用。

3 MQSeries MQI简介

MQSeries提供了一套应用开发接口MQI给应用程序调用。图4显示了MQI的调用流程。

1) MQCONN建立和队列管理器的连接,调用成功后返回一个操作句柄,通过句柄可以进行队列的操作。

2) MQOPEN打开一个队列,队列必须是调用MQCONN所连接的队列管理器管辖的范围,队列可以是本地队列和远程队列。

3) 调用MQPUT 向队列中存放消息;调用MQGET 从队列中获取消息;调用MQINQ获得当前打开队列的属性;调用MQSET改变当前打开队列的属性。

4) MQPUT1是一个操作集合,它顺序执行了三个函数调用,首先调用MQOPEN 打开一个队列,然后调用MQPUT 向队列中放入消息,最后调用 MQCLOSE 关闭当前队列。

5) MQCLOSE关闭已打开队列

6) MQDISC断开和当前队列管理器的连接。

具体操作过程中MQCONN和MQDISC通常为应用程序启动和停止时进行一次调用,应用程序运行过程中只需要不断调用队列操作MQI即可。

4 MQSeries在广东省电信的应用

MQ在广东省电信缴费系统的邮储方配置如上图所示,按照配置可以分为三类:一类是邮储主动发起业务,比如欠费查询、缴费;一类是电信主动发起业务,比如主动扣费;一类是文件收发,比如对账文件、批扣文件。三类业务分别使用独立的发送队列、接收队列、传输队列、发送通道和接收通道,三类业务逻辑清晰互不干扰,维护起来非常方便。

综上所述MQ相当于实现了一个异步单工长连接的通信模式,是分布应用或者异构系统之间的消息传递的一个很好的选择。

参考文献:

[1] IBM developerWorks技术专题(搜索“MQ”关键词):为您提供 WebSphere MQ 最新的文章、教程等技术资源.