MQ实验3
试验目的
熟悉MQ对象的创建方法
熟悉队列管理器之间如何交换信息
试验环境
WinXP, SP2
WebSphere MQ 6.0.2.0
实验步骤
通过本试验,你可以
创建分步式队列需要的对象
手工启动侦听器
手工启动消息通道
实现两个队列管理器之间的消息流
步骤一: 在QM1中创建和配置需要的连接对象
在本实验中使用的队列管理器将使用循环日志
检查没有通道发起者进程(runmqchi)在运行
使用runmqsc QM1命令创建相关对象。在先前已经创建好的队列管理器QM1上定义的对象如下:
发送方通道
通道名 = QM1.TO.QM2, QM1和QM2分别是本地队列管理器名和远程队列管理器名,本试验中均是这个含义,需要替换为实际的名称
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
= TCP/IP
网络地址 = localhost(5002)
host2可以是远程队列管理器主机名或者ip地址, 5002是远程队列管理器的监听端口
传输队列 = QM2
==>>DEFINE CHANNEL(QM1.TO.QM2) REPLACE CHLTYPE(SDR) CONNAME('LOCALHOST(5002)') XMITQ(QM2) TRPTYPE(TCP)
-=====>>>>顺序不能乱 SDR:发送方 RCVR:接收方
创建和远程队列管理器同名的传输队列(就是上面定义发送方通道中用到的QM2
=> DEF QL(QM2) REPLACE USAGE(XMITQ)
死信队列,名为DEADQ
=> DEF QL(DEADQ) LIKE(SYSTEM.DEAD.LETTER.QUEUE) REPLACE
修改队列管理器属性,使之使用刚建立的死信队列
=> ALTER QMGR DEADQ(DEADQ)
使用runmqsc命令创建这些对象
步骤二:创建和配置队列管理器QM2
用命令创建一个新的队列管理器QM2
在DOS命令行窗口执行crtmqm QM2
然后启动队列管理器QM2,执行strmqm QM2
使用runmqsc QM2命令创建相关对象。
通道名 = QM1.TO.QM2
属性和发送方通道相对应
DEF CHL(QM1.TO.QM2) CHLTYPE(RCVR) REPLACE TRPTYPE(TCP)
TRPTYPE:Transfer Protocol:传输协议
步骤三:配置和激活QM2的TCP侦听器
启动队列管理器QM2侦听器,侦听端口5002
runmqlsr –t TCP –p 5002 [-m qMgrName] 这里qMgrName为QM2
不要关掉该dos窗口
建议使用第二种方法,为:
在DOS命令行窗口执行runmqsc qMgrName
这里qMgrName为QM2
def listener(LSR) TRPTYPE(TCP) PORT(5002) CONTROL(QMGR) replace
start listener(LSR)
步骤四:测试和启动连接
从QM1的发送方ping消息通道,以检查消息的正确性
使用runmqsc QM1命令进入QM1管理控制台
PING CHL(QM1.TO.QM2)
检查成功完成
使用start channel(ChannelName)命令启动消息通道并验证它的状态
START CHL(QM1.TO.QM2)
用下面命令查看通道状态
DISPLAY CHS(QM1.TO.QM2):显示信息如下:
DISPLAY CHS(QM1.TO.QM2)
3 : DISPLAY CHS(QM1.TO.QM2)
AMQ8417: 显示通道状态细节。
CHANNEL(QM1.TO.QM2) CHLTYPE(SDR)
CONNAME(127.0.0.1(5002)) CURRENT
RQMNAME(QM2) STATUS(RUNNING)
SUBSTATE(MQGET) XMITQ(QM2)
步骤五:创建应用对象
定义应用队列
使用runmqsc QM2命令进入QM2管理控制台
注:runmqsc 后面的队列管理器名是区分大小写的
定义本地队列QL.B
DEF QL(QL.B) REPLACE
使用runmqsc QM1命令进入QM1管理控制台
创建远程队列QR.A,对应主机localhost上的QM2中本地队列QL.B, 这里可选择的你可以绑定传输队列为步骤一中建立的QM2
DEF QR(QR.A) REPLACE RNAME(QL.B) RQMNAME(QM2) XMITQ(QM2)
步骤五:测试分步式队列
使用样例程序amqsput发送消息到主机localhost上的队列QL.B
=> amqsput QR.A QM1
在主机localhost上用amqsbcg和amqsget命令查看到达的消息
amqsbcg QL.B QM2
或者
amqsget QL.B QM2
或者
查看目标队列的当前深度CURDEPTH
使用runmqsc QM2命令进入QM2管理控制台,执行
DISPLAY QL(QL.B) CURDEPTH
如果消息没有到达,请两个组共同检查可能的原因
本地传输队列是否空?
消息通道在运行吗? 是什么状态?
目的队列管理器的死信队列是否空
查看两个队列管理器的log信息