MQ通道搭建及连通性检查
在实现消息的跨队列管理器之间的传送时,通常会在本地队列管理器上配置远程队列和传输队列,在远端队列管理器上配置本地队列,并通过通道将两者连接起来。
应用程序一旦将消息通过MQPUT送出,则立即放入传输队列中。传输队列暂时存放待由通道发送的消息。一旦通道连通且条件允许,系统通信程序MCA会立即将消息送出。消息到达对方目标管理队列后,由对方的通信程序MCA接受下来并存放到相应的目标队列,即指定的本地队列。
传输队列本质上时一个本地队列,只是由系统通信进程MCA监护。如果应用放到传输队列的消息没有传输头(MQXQH),则不会被发送,而是按以下方式处理:
- 如果队列管理器设置了缺省死信队列,则消息放入该死信队列
- 如果未设置缺省死信队列,则对于非持久消息,消息被扔掉;对于持久消息,消息会滞留在传输队列中,可能会堵住后继的消息。
远程队列只是一个定义,并无队列实体。也就是说远程队列不能存放消息,只是指定目标队列的位置及传输路径。不同远程队列可以共用一个传输队列。消息通过远程队列放入传输队列时,会由队列管理器自动添加一个传输头(MQXQH),且传输头中的内容会根据远程队列定义自动填写。
通道搭建步骤:
建立队列管理器:crtmqm TEST1 crtmqm TEST2
启动队列管理器:strmqm TEST1 strmqm TEST2
进入队列管理器管理终端:runmqsc TEST1 runmqsc TEST2
定义监听端口:DEFINE LISTENER ('TEST1.TCP') TRPTYPE (TCP) PORT (11007) CONTROL (QMGR)
DEFINE LISTENER ('TEST2.TCP') TRPTYPE (TCP) PORT (11008) CONTROL (QMGR)
启动LISTENER: start LISTENER (TEST1.TCP)
start LISTENER (TEST1.TCP)
定义本地队列:define qlocal (TEST1Q) usage (xmitq)
define qlocal (TEST2Q)
定义死信队列:DEFINE QL (DEAD1Q) DEFPSIST (YES) REPLACE
DEFINE QL (DEAD2Q) DEFPSIST (YES) REPLACE
定义SENDER通道:DEFINE CHANNEL ('TO.TEST2') CHLTYPE (SDR) TRPTYPE (TCP) CONNAME ('192.1.1.1(11007)') xmitq (TEST1Q)
定义RECEIVE通道:DEFINE CHANNEL ('TO.TEST2') CHLTYPE (RCVR) TRPTYPE (TCP)
启动通道:start chl (TO.TEST2)
定义远程队列:define qremote (QR1) rname (TEST2Q) rqmname (TEST2) xmitq (TEST1Q)
常见命令
--查看队列状态--
dspmq
--查看通道--
dis chs(*)
--查看队列深度--
display ql(Q_SVC2ADP_4_HTTP) curdepth
--清除队列消息--
clear ql(Q_SVC2ADP_4_HTTP)
--查看CCSID--
display qmgr all
--修改CCSID--
ALTER QMGR [FORCE] CCSID(5488)
--监听端口--
telnet IP 端口
消息跟踪
通过跟踪消息传递的过程,判断MQ的设置是否正确
1. 远程队列--qr
查看远程队列管理器,队列名字,查看本地传输队列xmitq()
2. 传输队列--ql
查看传输通道TRIGDATA
3. 传输通道--chs
查看本地ip,通道类型,远端服务器地址,端口,队列管理器,传输队列
发送通道和接收通道是不是running
查看网络通不通:
telnet 192.168.0.2 1415