jms之MQ的互联互通

来源:互联网 发布:win7 32位安装java 编辑:程序博客网 时间:2024/05/01 18:19

一直在搞jms的东东, 一些命令还是比较麻烦的, 备份一下,留个记号。

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)

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

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

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

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

结束mqsc:End

两个队列管理器实现双向通信需要的mqsc脚本。在本地队列管理器(QMA)中(eg: 本地ip: 192.168.0.202, remote ip: 192.168.0.54):

*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.0.54') DISCINT(1800) HBINT(300) LONGRTY(999999999) LONGTMR(300) SHORTRTY(10000) SHORTTMR(30) XMITQ('QMB') REPLACEDEFINE 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.0.202') DISCINT(1800) HBINT(300) LONGRTY(999999999) LONGTMR(300) SHORTRTY(10000) SHORTTMR(30) XMITQ('QMA') REPLACEDEFINE 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

在文中增加如下:

# D20080423WebSphere 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

另外, websphere mq提供了测试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

原创粉丝点击