欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IBM MQ 使用指南

程序员文章站 2022-06-06 15:05:29
...
随着计算机网络和分布式应用的不断发展,远程消息传递越来越成为应用系统中不可缺少的组成部分。
商业消息中间件的出现保证了消息传输的可靠性,高效率和安全性,同时也减少了系统的开发周期。
目前应用最多的消息中间件产品为IBM MQSeries。
东风生管系统就是通过MQ 通讯的。
本文就针对MQ的基本操作与配置进行详细的阐述,希望对读者有所帮助。
一.MQ基本操作
MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel)。其基本的操作方法如下:
创建队列管理器 
crtmqm –q QMgrName
-q是指创建缺省的队列管理器
删除队列管理器
dltmqm QmgrName
启动队列管理器
strmqm QmgrName
如果是启动默认的队列管理器,可以不带其名字
停止队列管理器
endmqm QmgrName 受控停止
endmqm –i QmgrName 立即停止
endmqm –p QmgrName 强制停止
显示队列管理器 
dspmq –m QmgrName
运行MQSeries命令 
runmqsc QmgrName 
如果是默认队列管理器,可以不带其名字
往队列中放消息 
amqsput QName QmgrName 
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
从队列中取出消息 
amqsget QName QmgrName 
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
启动通道 
runmqchl –c ChlName –m QmgrName
启动侦听 
runmqlsr –t TYPE –p PORT –m QMgrName
停止侦听 
endmqlsr -m QmgrName
MQSeries命令
定义死信队列 
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
设定队列管理器的死信队列 
ALTER QMGR DEADQ(QNAME)
定义本地队列 
DEFINE QL(QNAME) REPLACE
定义别名队列 
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
远程队列定义 
DEFINE QREMOTE(QRNAME) + 
RNAME(AAA) RQMNAME(QMGRNAME) + 
XMITQ(QTNAME)
定义模型队列 
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
定义本地传输队列 
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) + 
INITQ(SYSTEM.CHANNEL.INITQ)+ 
PROCESS(PROCESSNAME) REPLACE
创建进程定义 
DEFINE PROCESS(PRONAME) + 
DESCR(‘STRING’)+ 
APPLTYPE(WINDOWSNT)+ 
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’) 
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
创建发送方通道 
DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+ 
CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE 
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
创建接收方通道 
DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
创建服务器连接通道 
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
显示队列的所有属性 
DISPLAY QUEUE(QNAME) [ALL]
显示队列的所选属性 
DISPLAY QUEUE(QNAME) DESCR GET PUT 
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
显示队列管理器的所有属性 
DISPLAY QMGR [ALL]
显示进程定义 
DISPLAY PROCESS(PRONAME)
更改属性 
ALTER QMGR DESCR(‘NEW DESCRIPTION’) 
ALTER QLOCAL(QNAME) PUT(DISABLED) 
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
删除队列 
DELETE QLOCAL(QNAME) 
DELETE QREMOTE(QRNAME)
清除队列中的所有消息 
CLEAR QLOCAL(QNAME)

<!-- -->

 

1.在<MQ_HOME>\bin (<MQ_HOME>指的是 Embeded JMS 的安装目录)目录下执行命令(查找队列管理器名):

<MQ_HOME>\bin > dspmq
QMNAME(WAS_washyf_server1) STATUS(正在运行)

其中的
WAS_washyf_server1 就是您的队列管理器名称

2.在<MQ_HOME>\bin目录下执行命令(启动MQ脚本语言环境):

<MQ_HOME>\bin >runmqsc WAS_washyf_server1

3.打开管理控制台 > 应用程序服务器 > <server_name> > 服务器组件 > JMS 服务器,找到您要监控的队列名,在本例中为:TestJMSQueue1,所以嵌入式JMS中真正应用的队列名应该为 WQ_TestJMSQueue1。(其中<server_name>是指 JMS队列 所在的应用服务器名)

4.切换到前面的命令行窗口下,运行如下的命令:
dis ql(*)
从列出的全部队列名中验证WQ_TestJMSQueue1的存在

5.在命令行窗口下输入:
dis ql('WQ_TestJMSQueue1')
会有如下的输出:

dis ql('WQ_TestJMSQueue1')
3 : dis ql('WQ_TestJMSQueue1')
AMQ8409: 显示队列细节。
DESCR(WebSphere Application Server queue - do not delete)
PROCESS( ) BOQNAME(SYSTEM.DEAD.LETTER.QUEUE)
INITQ( ) TRIGDATA( )
CLUSTER( ) CLUSNL( )
QUEUE(WQ_TestJMSQueue1) CRDATE(2003-10-23)
CRTIME(17.11.39) ALTDATE(2003-10-23)
ALTTIME(17.11.39) GET(ENABLED)
PUT(ENABLED) DEFPRTY(0)
DEFPSIST(NO) MAXDEPTH(640000)
MAXMSGL(4194304) BOTHRESH(5)
SHARE DEFSOPT(SHARED)
HARDENBO MSGDLVSQ(PRIORITY)
RETINTVL(999999999) USAGE(NORMAL)
NOTRIGGER TRIGTYPE(FIRST)
TRIGDPTH(1) TRIGMPRI(0)
QDEPTHHI(80) QDEPTHLO(20)
QDPMAXEV(ENABLED) QDPHIEV(DISABLED)
QDPLOEV(DISABLED) QSVCINT(999999999)
QSVCIEV(NONE) DISTL(NO)
DEFTYPE(PREDEFINED) TYPE(QLOCAL)
SCOPE(QMGR) DEFBIND(OPEN)
IPPROCS(1) OPPROCS(0)
CURDEPTH(0)

请注意CURDEPTH(0)这里的数字就是当前您队列里面的消息数,IPPROCS(1)表示有应用正在监控这
个队列

6.如果,有应用正在监控这个队列把使用这个队列的应用停止。

7.在命令行窗口下输入:

clear ql('WQ_TestJMSQueue1')
8 : clear ql('WQ_TestJMSQueue1')
AMQ8022: WebSphere MQ 队列已清除。

8.退出命令行使用 end 命令。

查看queue的message的内容
第一种方式:使用/opt/mqm/samp/bin/amqsget 队列 的名称 和 队列管理器
第二种方式:使用/opt/mqm/samp/bin/amqsbcg