jms之MQ的互联互通

来源:互联网 发布:js调用ios相册 编辑:程序博客网 时间:2024/05/01 06:30


1:创建队列管理器:
以管理员身份登陆websphere mq服务器,运行websphere MQ控制命令dspmq,显示已有队列管理器状态:
dspmq
比如项目用到的队列管理器是MQCOSMOS,如果没有,新建一个:

crtmqm –q MQCOSMOS
如果MQCOSMOS的状态为”Ended unexpected”,则需要启动它:
strmqm MQCOSMOS
停止消息管理器:
endmqm MQCOSMOS
启用MQSC命令:
runmqsc MQCOSMOS

mqsc命令:
显示该队列管理器下所有队列:
display qstatus(*)
查看queue中的消息数:
dis ql('ICAREQL.ONL.PROD.REQUEST') curdepth
创建本地message queue:
define qlocal(ICAREQL.ONL.DEV.DISPATCH)

查看通道定义:
display channel(*) trptype, convert

查看通道状态:
display chstatus(*) current

ping通道(只能在发送通道和服务器通道使用)
ping channel(SYSTEM.DEF.SENDER).

清空queue中的message:
CLEAR QLOCAL('myqueue');
值得注意的是:当此message queue正在被第三方使用时, clear命令不会自行成功(比如was的某个MDB正在使用此message queue时)

推荐定义死信队列:
查看mqm 中是否定义了死信队列:
 display qmgr DEADQ
返回:
   QMNAME(mqm_was55_ntel)                  DEADQ( )
则: 定义一个队列:
DEFINE QLOCAL('MYDEADQ') DEFPSIST(YES) MAXDEPTH(20000) MAXMSGL(4194304) REPLACE 
把此队列设置为死信队列:
ALTER QMGR DEADQ('MYDEADQ') TRIGINT(10000)
再次查看:
display qmgr DEADQ
返回:
   QMNAME(mqm_was55_ntel)                  DEADQ(MYDEADQ)


结束mqsc:
End


两个队列管理器实现双向通信需要的mqsc脚本。

实现两个mqm的互联互通, 需要如下基础设施:
在源队列管理器上:
发送通道
远程队列定义
传输队列
死信队列

在目标队列管理器上:
接收通道
目标队列
死信队列

由于需要互联互通,是双向通讯, 则每一个mqm既是源队列, 也是目标队列, 以上设施都需要.

在本地队列管理器(QMA)中(eg: 本地ip: 192.168.10.222, remote ip: 192.168.10.154):

*echo "修改死信队列为DEADQ"
ALTER QMGR DEADQ('DEADQ') TRIGINT(10000)

*echo "定义远程队列"
DEFINE QREMOTE('QRB') DEFPSIST(YES) XMITQ('QMB') RNAME('QLB') RQMNAME('QMB') REPLACE

*echo "定义死信队列"
DEFINE QLOCAL('DEADQ') DEFPSIST(YES) MAXDEPTH(20000) MAXMSGL(4194304) REPLACE

*echo "定义本地接收队列"
DEFINE QLOCAL('QLA') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) TRIGGER TRIGTYPE(FIRST) PROCESS('CICS.PRO') INITQ('SYSTEM.CICS.INITIATION.QUEUE') REPLACE

*echo "定义传输队列"
DEFINE QLOCAL('QMB') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) USAGE(XMITQ) TRIGGER TRIGTYPE(FIRST) TRIGDATA('A.B') INITQ('SYSTEM.CHANNEL.INITQ') REPLACE

*echo "修改system.cics.initiation.queue队列的属性"
ALTER QLOCAL('SYSTEM.CICS.INITIATION.QUEUE') DESCR('WebSphere MQ Default CICS Initiation queue') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1000)

*echo "定义接收通道"
DEFINE CHANNEL('B.A') CHLTYPE(RCVR) TRPTYPE(TCP) BATCHSZ(50) HBINT(300) MRRTY(10) MRTMR(1000) REPLACE

*echo "定义发送通道"
DEFINE CHANNEL('A.B') CHLTYPE(SDR) TRPTYPE(TCP) BATCHSZ(50) CONNAME('192.168.10.154') DISCINT(1800) HBINT(300) LONGRTY(999999999) LONGTMR(300) SHORTRTY(10000) SHORTTMR(30) XMITQ('QMB') REPLACE
DEFINE CHANNEL('SYSTEM.ADMIN.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) HBINT(300) MAXMSGL(4194304) MCAUSER('mqm') REPLACE

*echo "定义接收进程"
DEFINE PROCESS('CICS.PRO') REPLACE APPLTYPE(CICS) APPLICID('TEST')

------------------------------------
在远程队列管理器(QMB)中:
*echo "修改死信队列为DEADQ"
ALTER QMGR DEADQ('DEADQ') TRIGINT(10000)

*echo "定义远程队列"
DEFINE QREMOTE('QRA') DEFPSIST(YES) XMITQ('QMA') RNAME('QLA') RQMNAME('QMA') REPLACE

*echo "定义死信队列"
DEFINE QLOCAL('DEADQ') DEFPSIST(YES) MAXDEPTH(20000) MAXMSGL(4194304) REPLACE

*echo "定义本地接收队列"
DEFINE QLOCAL('QLB') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) TRIGGER TRIGTYPE(FIRST) PROCESS('CICS.PRO') INITQ('SYSTEM.CICS.INITIATION.QUEUE') REPLACE

*echo "定义传输队列"
DEFINE QLOCAL('QMA') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1048576) USAGE(XMITQ) TRIGGER TRIGTYPE(FIRST) TRIGDATA('B.A') INITQ('SYSTEM.CHANNEL.INITQ') REPLACE

*echo "修改system.cics.initiation.queue队列的属性"
ALTER QLOCAL('SYSTEM.CICS.INITIATION.QUEUE') DESCR('WebSphere MQ Default CICS Initiation queue') DEFPSIST(YES) MAXDEPTH(100000) MAXMSGL(1000)

*echo "定义接收通道"
DEFINE CHANNEL('A.B') CHLTYPE(RCVR) TRPTYPE(TCP) BATCHSZ(50) HBINT(300) MRRTY(10) MRTMR(1000) REPLACE

*echo "定义发送通道"
DEFINE CHANNEL('B.A') CHLTYPE(SDR) TRPTYPE(TCP) BATCHSZ(50) CONNAME('192.168.10.222') DISCINT(1800) HBINT(300) LONGRTY(999999999) LONGTMR(300) SHORTRTY(10000) SHORTTMR(30) XMITQ('QMA') REPLACE
DEFINE CHANNEL('SYSTEM.ADMIN.SVRCONN') CHLTYPE(SVRCONN) TRPTYPE(TCP) HBINT(300) MAXMSGL(4194304) MCAUSER('mqm') REPLACE

*echo "定义接收进程"
DEFINE PROCESS('CICS.PRO') REPLACE APPLTYPE(CICS) APPLICID('TEST')

 

实现两个队列管理器互联互通的最后一步是在本地和远程启动相应的监听程序,端口号为1414。
进入/etc/xinetd.conf(路径不清楚, 可用find ./ -name amqcrsta 查找),
编辑该文件:
gedit /etc/xinetd.conf

在文中增加如下:
# D20080423
WebSphere MQ stream tcp nowait mqm /opt/mqm/maintenance/6.0.2.2/MQSeriesServer/backup/opt/mqm/bin/amqcrsta amqcrsta [-m Queue_Man_Name]
# D20080423 END

另外, 还要需要修改/etc/services文件, 对MQ 开放1414端口(root或超级用户才有权限修改)
在该文件中增加:
WebSphere MQ 1414/tcp   # used by was mq

为使修改生效, 需重启xinet进程
查找该进程
ps -elf |grep xinet

kill它:kill -9 788

运行WebSphere MQ提供的监听程序:
runmqlsr -m QMB -t TCP

启动xinetd(start | stop | status)
[root@P202 ~]# service xinetd start


测试queue通讯:
1.切换到MQ安装目录
2.进入samp/bin
3. 执行amqsput q_name mqm_name进入发送器
amqsput QRB QMA
4. 发消息
5. 执行 amqsget q_name mqm_name进入接收器
amqsget QLB QMB

原创粉丝点击