《MQ知识技能培训.doc》由会员分享,可在线阅读,更多相关《MQ知识技能培训.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MQ知识培训Ver0.91一、MQ基本知识介绍MQ是IBM的消息中间件,主要为不同平台或软件提供可靠、异步、不重复的消息传送。而且它支持多种通讯协议,在MQ网关的支持下,也能实现网络间的传输。现在MQSeries已经作为IBM的Websphere产品的一部分,称为Websphere MQ。1、Messages(消息)消息就是一系列字节,为各种应用程序所使用。对于MQ而言,Message(消息)包括2部分,应用程序写入的消息数据部分以及MQ增加的消息描述部分。这部分描述主要包括一些优先级、目的队列。目的队列管理器、报告等的属性值2、Queue(队列)队列就是存放消息的一个数据结构。程序或队列管理
2、器可从队列取出、放入消息。通常可以定义队列存放的最大的消息数目、每条消息的最大长度。还可以定义该队列是否允许取出或放入消息。队列可分为本地队列(local queue)、远程队列(remote queue)和传输队列(transmit queue)。本地队列是指队列实体存在于本地的队列管理器内的。远程队列是指队列实体存在于别的队列管理器内的。传输队列则是一种特殊的本地队列,其用途主要为不同队列管理器间的通讯提供一个消息存放的实体。3、Queue Manager(队列管理器)队列管理器就是为外部的应用提供队列服务以及管理本地队列及消息发送的控制等。4、Channel(通道)通道为队列管理器提供了
3、通讯的基础,现在可分两种通道:消息通道和MQI通道。消息通道为两个队列管理器间提供通讯的基础。MQI通道主要为MQClient端提供访问MQServer的通讯基础。二、MQ基本操作1、 建立侦听端口在WINDOWS下面可以定义自动启动队列侦听器。用命令行(可在多种系统下通用)的方式为:runmqlsr t 协议名 m 队列管理器名 p 侦听端口一般默认端口为1414。2、建立队列管理器间的消息通道双方各建立一发送方通道与接收方通道。需要注意的是发送方通道的名字需要与对方接收方通道的名字一样。如:队列管理器A,有发送方通道A.B、接收方通道B.A则队列管理器B需要定义如下:发送方通道B.A、接收
4、方通道A.B另,如果对方管理器的侦听端口不是默认端口(1414),则建立发送方通道的时候在连接名称不仅需要填上对方的主机名(或IP地址)还需要以带(port)的形式把对方管理器的侦听端口填上。如:winserver(50000)则表示连接到winserver这台主机侦听端口为50000的队列管理器上。注:如果需要建立一个永久连接则需要把心跳间隔的时间定为0,否则一定时间内没消息发送的话,队列管理器会自动断开连接的。3、建立远程队列实现消息的传送在建立好消息通道后就可以建立远程队列指定对方的管理器名与对方的队列名。注:在定义发送方通道的时候需要指定一个传输队列。而定义远程队列的时候也需要指定一个
5、传输队列。必须注意此2个队列的一致性,否则可能把消息发送到不同的队列管理器上了。三、命令行下的操作1、启动队列管理器strmqm 队列管理器名2、停止队列管理器endmqm 队列管理器名3、创建队列管理器crtmqm 队列管理器名4、删除队列管理器dltmqm 队列管理器名5、进入MQSC管理模式runmqsc 队列管理器名6、启动侦听端口runmqlsr t 协议名 p 端口 m 队列管理器名7、停止侦听端口endmqlsr m 队列管理器名8、显示目前已经创建的队列管理器Dspmq9、起监听端口START LISTENER()注:此命令仅在MQ5.2以上才适用。9、在进入MQSC管理模式(
6、即执行第五步)命令简单介绍a、启动通道start chl(通道名)b、停止通道stop chl(通道名)c、检查通道ping chl(通道名)d、通道复位reset chl(通道名)e、解决未知状态resolve chl(通道名) action(commit)f、显示所有本地队列名dis ql(*)g、显示所有通道名dis chl(*)h、查看某个队列dis ql(队列名)四、使用C/C+编写访问MQ的程序1、 使用公司内部的类:CMQManager提供的方法有:/连接到指定的队列管理器bool connectQManager(const char* QManagerName);/用指定的方式
7、打开队列、默认为读取方式bool accessQueue(const char* QueueName,int OpenMethod = MQMA_READ|MQMA_WRITE);/获取最近的错误代码long getLastErrorCode();/关闭队列的连接void closeQueue();/关闭队列管理器的连接void disconnect();/向已经打开的队列放入信息bool putMessage(const char* message,int MsgLength = -1);/从已经打开的队列读取信息bool getMessage(char* message,const lon
8、g buflen,int* MsgLength,int waitInterval = -1);头文件与源文件分别为:MQManager.h MQManager.cpp需要链接的库文件为:mqm.lib(WINDWOS)libmqm.a(UNIX)五、使用Java编写访问MQ的程序1、MQQueueManager队列管理器访问类常用方法:public MQQueueManager(String queueManagerName)建立一个管理器实例注:如果使用绑定的方式则可以直接创建一个新的队列管理器实例。但是在某些平台下这样直接创建会出错,必须采用MQClient的方式进行连接。此时需要先定义服
9、务通道,端口,服务名等环境变量,再创建一个队列管理器实例。如:MQEnvironment.hostname = “127.0.0.1”;MQEnvironment.port = 50000;MQEnvironment.channel=”SRVCHL”;MQQueueManager manager = new MQQueueManager(“BOSS_ZH”);其中hostname表示队列管理器所在的机器地址(一般在本地则填localhost或127.0.0.1)。port就是队列管理器的侦听端口。Channel定义访问的服务器通道名(需要自己在队列管理器中先定义,其方法类似与一般通道的定义,不
10、过类型是服务器通道)public synchornized MQQueue accessQueue(String QueueName,int openOptions)返回一个连接队列的实例(类名为:MQQueue)openOptions的常用值有:MQC.MQOO_FAIL_IF_QUIESCING如果队列管理器停止则返回失败MQC.MQOO_OUTPUT以写方式打开队列MQC.MQOO_INPUT_AS_Q_DEF以队列默认读取方式打开队列使用的时候可以采用与操作来实现多种打开队列方式,如:int openOptions = MQC.MQOO_FAIL_IF_QUIESCING | MQC.
11、MQOO_OUTPUT | MQC.MQOO_INPUT_AS_Q_DEF;表示以读、写方式打开队列public bool isConnected()返回队列管理器是否在连接状态public synchronized void disconnect()断开队列管理器的连接2、MQQueue队列访问类常用方法:通常MQQueue实例的生成通过调用MQQueueManager的accessQueue方法类实例化。public synchronized void get(MQMessage message,MQGetMessageOptions gmo)从队列管理器读取一条消息通过message实例
12、返回。MQGetMessageOptions的用法下面再详述。public synchronized void put(MQMessage message,MQPutMessageOptions pmo)往队列管理器放入一条消息MQPutMessageOptions的用法下面再详述public synchronized void close()关闭队列的连接3、MQMessage消息操作类常用方法:public MQMessage()默认构造函数public int getDataLength()返回可读取的消息的长度(以byte作为单位)public void readFully(byte
13、b)读取消息到数组b中,长度以b的数组长度为准一般读取消息的操作为:MQMessage message = new MQMessage();.int length = message.getDataLength();byte buffer = new bytelength;message.readFully(buffer);public void write(byte b)把指定的字节数组写入消息一般写消息的操作为:byte buffer = “asdasdad”.getBytes();MQMessage message = new MQMessage();.message.write(buf
14、fer);queue.put(message.4、MQGetMessageOptions取消息操作选项常用方法:public MQGetMessageOptions()默认构造函数public int options操作选项(位操作)public int matchOptions条件选项(按照某种条件获取消息)public int waitInterval等待时长(单位:毫秒)仅当options选项有MQC.MQGMO_WAIT才有效5、MQPutMessageOptions方消息操作选项常用方法:public MQPutMessageOptions()默认构造函数public int opt
15、ions操作选项(位操作)六、练习1、 建立一个队列管理器,名称为“本机名.QM”侦听端口为14142、 建立一个队列管理器,名称为“TEST_ZH”侦听端口为500003、 用MQSC方式为这2个队列管理器建立消息通道,远程队列等对象。4、 编写C+一个程序(使用MQManager的类)实现从某个队列中读取取数据5、 编写C+一个程序(使用MQManager的类)实现从某个队列中写数据6、 编写java一个程序实现从某个队列中读取数据(*)7、 编写java一个程序实现从某个队列中写数据(*)注:带*者为选做,如果不会可以先不做七、参考资源1、MQSeries Information Center下有比较详细的帮助具体为:Reference下的MQSeries Manuals里面有编程指导,有C的API说明、C+类库说明、Java类库说明还有MQSC命令的解释。如果大家有兴趣的话可以深入继续研究。2、网上资源IBM的网站有很多的MQ pdf文档,他们的讨论园地为:八 附加:1 MQ的日志在 /var/mqm/qmgrs
限制150内