WebSphere MQ常用命令及配置 博客分类: WebSphere MQ WebSphere MQ命令
一. 队列管理器
1.创建队列管理器
命令:crtmqm <qmgrName>
示例: crtmqm -ld /var/mqm/log -md /var/mqm/data -lc -lf 16384 -lp 25 -ls 5 -q QMCIS
参数说明:
-ld 日志文件目录
-md 数据文件目录
-lc 使用循环日志
-lf 日志文件页大小
-lp 主日志文件个数
-ls 辅助日志文件个数
-q是指创建缺省的队列管理器
QMCIS:队列管理器名
如:
crtmqm –q QmgrName crtmqm -ld /data/mqm/QmgrName/log -md /data/mqm/QmgrName/data -lc -lf 10240 -lp 50 -ls 30 -q QmgrName
2. 启动队列管理器
命令:strmqm <qmgrName>
示例:strmqm QmgrName
如果是启动默认的队列管理器,可以不带其名字
3.进入队列管理器,运行MQ命令
示例:runmqsc QmgrName
如果是默认队列管理器,可以不带其名字
4.显示队列管理器的运行状态
命令:dspmq
命令结果显示示例:
QMNAME(Test) STATUS(正在运行) QMNAME(Test2) STATUS(已正常结束)
显示指定队列管理器的运行状态
dspmq –m QmgrName
显示队列管理器的所有属性
a.先进入队列管理器
runmqsc QmgrName
b.运行如下命令,显示队列管理器的所有属性,其中,display可简写为dis。
display qmgr
5.停止队列管理器
命令:endmqm -c|-w|-i|-p <qmgrName>
参数说明:
-c:受控关闭(或停顿关闭)。这是缺省值。
队列管理器停止,但仅当所有应用程序已断开连接后才停止。当前正在处理的任何 MQI 调用已完成。
立即将控制权返回给您,并且不通知您队列管理器是何时停止的。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 QUIESCE 方式发出的 STOP CHANNEL 命令。
-w:等待关闭。
此类型的关闭等效于受控关闭(除了仅当队列管理器已停止后才将控制权返回给您之外)。当执行关闭时,您将接收到消息:等待队列管理器 qmName 结束。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 QUIESCE 方式发出的 STOP CHANNEL 命令。
-i:立即关闭。队列管理器在完成所有当前正在处理的 MQI 调用后停止。任何在该命令发出后发出的 MQI 请求都将失败。当队列管理器再次启动时,任何未完成的工作单元将回滚。 队列管理器结束后返回控制权。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 FORCE 方式发出的 STOP CHANNEL 命令。
-p:抢先关闭。
仅在意外情况下使用此类型的关闭。例如,当队列管理器在常规 endmqm 命令下未停止。
队列管理器可以停止而不等待应用程序断开连接或 MQI 调用完成。这可能会产生 WebSphere MQ 应用程序的不可预测的结果。关闭方式设置为立即关闭。如果队列管理器稍后未停止,关闭方式将升级,且终止所有剩余的的队列管理器进程。
对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 TERMINATE 方式发出的 STOP CHANNEL 命令。
如:
endmqm QmgrName 受控停止 endmqm –i QmgrName 立即停止 endmqm –p QmgrName 强制停止
6. 删除队列管理器
命令:dltmqm
如:
dltmqm QmgrName
ALTER QMGR CHLAUTH (DISABLED)
二. 管理本地MQ对象
使用MQSC命令执行定义或修改队列、通道等操作。MQSC命令可以有以下两种使用方式:
a.交互地使用 MQSC 命令:runmqsc [qmgrName]
b.从文本文件运行 MQSC 命令:runmqsc [qmgrName] < myprog.in > myprog.out
命名WebSphere MQ 对象的规则:
WebSphere MQ认证信息、通道、客户机通道、侦听器、名称列表、进程、队列、服务和存储类对象存在于各自独立的对象名称空间中,因此,每个不同类型的对象都可以有相同的名称。但是,同一个名称空间中的对象不能与任何其它的对象同名。(例如,本地队列不能和模型队列有相同的名称。)WebSphere MQ 中的名称都区分大小写;但是,您应该记住不包含在引号中的小写字符将转换为大写。
示例:
alter qmgr CCSID(819) #修改字符集 def ql(DEADQ) defpsist(yes) maxdepth(20000) replace alter qmgr deadq(DEADQ) #设置死信队列为DEADQ
1. 队列
1). 定义本地队列示例
def ql(LOCALQ) maxdepth(10000) defpsist(yes) replace
参数说明:
ql(LOCALQ): 队列本地名称
maxdepth:队列上允许的最大消息数;
defpsist:队列中消息持久性默认值。
NO该队列上的消息在队列管理器重新启动时丢失
YES该队列上的消息在队列管理器重新启动时保存了下来。
maxmsgl:仅对本地队列和模型队列有效,表示队列中可以容纳的最大消息长度,这个属性的调整范围在各个平台上的上限是不一样的。通道在建立的时候会有一个握手过程,双方会交换各自通道定义上的maxmsgl,最后协商出通道使用的最大消息长度,一般会取双方定义中较小的那一个。
队列管理器maxmsgl,默认值:4M,可以调整范围:32K - 100M;通道maxmsgl,默认值:4M,可以调整范围:0-队列管理器maxmsgl;队列maxmsgl,默认值:4M,可以调整范围:0-队列管理器maxmsgl;使用alter命令,即可对其maxmsgl进行修改。三者之间的关系:队列管理器maxmsgl>=队列maxmsgl。
DEFPRTY:放入队列中的消息的缺省优先级。 该值必须大于等于零(最低的优先级)并小于等于 MAXPRTY 队列管理器属性。 可以使用 DISPLAY QMGR 命令来显示 MAXPRTY,(MAXPRTY 为 9。)
关于消息在队列中的保存时间:消息在队列的保存时间与三个设置有关:队列defpsist属性、消息Persistence持久性属性和消息Expiry消息到期时间属性,其中队列defpsist属性是在创建队列时设置,消息Persistence和Expiry属性是应用程序往队列放入消息时指定。消息本身的Persistence值优先于队列defpsist值。Expiry指消息到期时间,即经过指定的时间后,消息如果还没被取走,此消息将过期(无效)。消息过期后,可能会自动从队列中删除(取决于不同操作系统的MQ实现)。对于非持久性消息,即使Expiry设为永不过期,重启队列管理器时,消息也将丢失。
定义持久信队列:DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
设定队列管理器的持久信队列:ALTER QMGR DEADQ(QNAME)
定义本地队列:DEFINE QL(QNAME) REPLACE
定义别名队列:DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
如:
def ql(LOCALQ) maxdepth(100000) defpsist(yes) maxmsgl(10485760) DEFPRTY(9) replace
2). 定义远程队列示例
def qr(REMOTEQ) rname(LOCALQ) rqmname(QmgrName) xmitq(TRANS) defpsist(yes) replace
参数说明:
qr(REMOTEQ):队列本地名称,名字可任意取;
rname(LOCALQ):远程队列名,必须与远程队列管理器中的本地队列名相同;
rqmname(QmgrName):远程队列管理器名,必须与远程队列管理器名相同;
xmitq(TRANS):本地传输队列名称。
如:
DEFINE QREMOTE (REMOTEQ) RNAME (LOCALQ) RQMNAME (QmgrName) + XMITQ(TRANS) def qr(REMOTEQ) rname(LOCALQ) rqmname(QmgrName) xmitq(TRANS) defpsist(yes) replace
3). 定义传输队列
def ql(TRANS) usage(XMITQ) defpsist(YES) maxdepth(50000) trigger trigtype(FIRST) trigdata(01.SENDER) initq(SYSTEM.CHANNEL.INITQ) replace
参数说明:
ql (TRANS):队列本地名称,名字可任意取;
usage(XMITQ):指定此本地队列为传输队列,参数值固定填“XMITQ”;
defpsist:队列中消息持久性默认值。
NO该队列上的消息在队列管理器重新启动时丢失
YES该队列上的消息在队列管理器重新启动时保存了下来。
maxdepth:队列上允许的最大消息数;
trigger:启动触发(相应的,NOTRIGGER为禁用触发)
trigtype(FIRST) :触发方式,建议值为“FIRST”,即第一条消息触发;
FIRST:当第一条消息(优先级等于或大于由队列的 TRIGMPRI 属性指定的值)到达队列。
EVERY:每当一条消息(优先级等于或大于由队列的 TRIGMPRI 属性指定的值)到达队列。
DEPTH:当消息(优先级等于或大于由队列的TRIGMPRI属性指定的值)的数目等于 TRIGDPTH属性指定的数目。
NONE:没有写触发消息。
trigdata(01.SENDER):触发数据,值为传输队列将使用的发送通道名;
initq(SYSTEM.CHANNEL.INITQ):触发队列,固定填“SYSTEM.CHANNEL.INITQ”。 触发器在此的作用是当传输队列接收到第一条消息时,将触发启动指定的发送通道。
PROCESS(string):MQSeries 进程的本地名。这是进程实例的名称,标识了触发事件发生时,队列管理器启动的应用程序。在定义本地队列时,不必定义进程,但是对于触发事件的发生,它必须是可用的。如果队列是传输队列,则进程给出要启动的通道的名称。对于 AIX、HP-UX 、OS/2 Warp、OS/400、Sun Solaris 和 Windows NT 上的传输队列,此参数是可选的;如果没有指定此参数,则从为TRIGDATA参数指定的值中获取参数名。
如:
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ)+ PROCESS(PROCESSNAME) REPLACE def ql(TRANS) usage(xmitq) defpsist(yes) maxdepth(100000) maxmsgl(10485760) DEFPRTY(9) + trigger trigtype(every) trigdata(01.SENDER) initq(system.channel.initq) replace
4).定义模型队列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
模型队列不是真的队列,而是一个属性集,在用 MQOPEN API 调用来创建动态队列时可以使用模型队列。
在定义之后,模型队列就与任何其它队列一样具有一个可用属性的完全集,尽管某些属性是缺省的。
5). 查看队列
dis ql(qname) all/DISPLAY QUEUE (QNAME) ALL:显示队列所有属性
如:
DISPLAY QUEUE(REMOTEQ) ALL
dis ql(qname) curdepth 显示队列当前深度,即当前队列中存放的消息数
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH显示队列最大深度
如:
display queue(LOCALQ) MAXDEPTH CURDEPTH
dis qs(qname) type(queue) all显示与队列相关的状态信息
dis qs(qname) type(handle) all显示与访问队列的句柄相关的状态信息
6).修改队列属性
显示队列的所选属性
DISPLAY QUEUE (QNAME) DESCR GET PUT
更改属性
ALTER QMGR DESCR (‘NEW DESCRIPTION’) ALTER QLOCAL (QNAME) PUT (DISABLED) ALTER QALIAS (QNAME) TARGQ (TARGQNAME)
7).死信队列
定义死信队列:
def ql(DEADQ) defpsist(yes) maxdepth(200000) maxmsgl(10485760) replace
设定队列管理器的死信队列:
alter qmgr deadq(deadq) maxmsgl(10485760) ccsid(819)
当然,在实际应用中,也可以定义错误消息队列,如下所示:
def ql(ERRMSG) defpsist(yes) maxdepth(200000) maxmsgl(10485760) replace
8).操作队列
a.往队列中放消息
amqsput QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
如:
amqsput LOCALQ QmgrName
b.从队列中取出消息
amqsget QName QmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字
如:
amqsget LOCALQ QmgrName
c.清除队列中的所有消息
先进入队列管理器,再CLEAR QLOCAL (QNAME)
如:
runmqsc QmgrName Clear QLOCAL(LOCALQ)
注:清除队列中的消息时出错时处理,尝试执行命令RESOLVE CHANNEL(channel_name) ACTION( COMMIT )后,再执行clear ql命令。
9). 删除队列
DELETE QLOCAL (QNAME):删除本地或传输队列
DELETE QREMOTE (QRNAME):删除远程队列
如:
delete ql(LOCALQ) delete qlocal(TRANS) delete qremote(REMOTEQ)
2.创建进程定义
创建进程定义
DEFINE PROCESS (PRONAME) + DESCR ('STRING') + APPLTYPE (WINDOWSNT) + APPLICID ('runmqchl -c SDR_TEST -m QM_ TEST')
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
显示进程定义
DISPLAY PROCESS (PRONAME)
3. 通道
1). 定义接收通道
def chl(02.SENDER) chltype(rcvr) trptype(tcp) replace
参数描述:
chl(02.SENDER):接收通道名称,必须与远程队列管理器中的发送对列名称相同。推荐的命名规则为 “远程队列管理器名.本地队列管理器名”;
chltype(rcvr):指定通道为类型,值固定为“rcvr”;
trptype(tcp):通讯协议,除非特别指明,一般采用“tcp”协议。
如:
DEFINE CHANNEL (SDR_ TEST) CHLTYPE (RCVR) REPLACE def chl(02.SENDER) chltype (RCVR) trptype (TCP) replace
2). 定义发送通道
def chl(01.SENDER) chltype(SDR) discint(0) conname('10.2.106.106(1417)') xmitq(TRANS) trptype(tcp) shortrty(10000) shorttmr(30) longtmr(300) longrty(999999999) batchsz(10) maxmsgl(10485760) replace
chltype(SDR):指定通道为类型,值固定为“SDR”。其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
DISCINT(Disconnect Interval,断开间隔):当传输队列中没有消息要传送时, 发送方通道(SDR)、服务器通道(SVR)将在等待了该参数指定的时间间隔后断开连接,停止通道。该参数以秒为单位,定义新的通道时,如果没有特别指定,该参数会继承系统对象的属性,设为6000秒,约两个小时。亦通道连续两个小时没有消息发送后就会停止。DISCINT参数设定为0,通道永远不会停止。
conname('10.2.106.106(1417)'):连接名包括对方的IP和端口。
xmitq(TRANS):本地传输队列名称。
shortrty:短重试次数。
shorttmr:短重试间隔。
longtmr:长重试次数。
longrty:长重试间隔。
batchsz:批处理大小。
如:
DEFINE CHANNEL (SDRNAME) CHLTYPE (SDR) + CONNAME (‘100.100.100.215(1418)’) XMITQ (QTNAME) REPLACE def chl(01.SENDER) chltype(sdr) discint(0) conname('10.2.106.106(1415)') xmitq(TRANS) trptype(tcp) + shortrty(10000) shorttmr(30) longtmr(300) longrty(999999999) batchsz(10) maxmsgl(10485760) replace
3). 定义服务器连接通道
def chl() chltype() replace
def chl(DC.SVRCONN) chltype(SVRCONN) TRPTYPE(tcp) mcauser('mqm') DESCR('Server-connection CHANNEL') replace
chl(DC.SVRCONN):连接接收通道名称,JAVA客户端如连接通过此通道名称连接。
chltype(SVRCONN):指定通道为类型,值固定为“SVRCONN”。其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
mcauser('mqm'):设置MCAUSER为mqm。
DESCR('Server-connection CHANNEL'):通道描述。
如:
def chl(DC.SVRCONN) chltype(svrconn) TRPTYPE(tcp) mcauser('mqm') + DESCR('Server-connection CHANNEL') replace
4).查看通道定义
DISPLAY CHANNEL(WZ.SENDER)
5). 启动通道
start chl(01.SENDER) 或start channel(01.SENDER)
6).查看通道状态
dis chs(channel name)
通道的当前状态,它可以是正在启动、正在绑定、正在初始化、正在运行、正在停止、正在重试、已暂停、已停止、正在请求和通道状态未找到。
正常运行时,通道状态为“正在运行”;
关闭通道时,通道状态为“已停止”;
如果通道状态长时间处于“正在绑定”(binding)、“正在重试”(retrying),则表明通道不正常,需要人工介入。这时可查看队列管理器日志文件,日志文件中一般会提供异常原因。
关于“通道状态未找到”:此状态值仅表示当前没有建立到此通道的连接,并不能表示通道是否正常。
7). 关闭通道
stop chl(channel name)
8). 重置通道
reset chl(channel name)
9). 删除通道
delete chl(channel name)
三. 监听器
定义监听器
def listener(QMC01) TRPTYPE(TCP) PORT(1417) CONTROL(STARTONLY) BACKLOG(0) replace
参数描述:
listener(QMC01):监听器名,名称可任意取;
TRPTYPE(TCP):通讯协议类型;
PORT(1417):服务监听端口
CONTROL(string)指定如何启动和停止侦听器:
MANUAL 不会自动启动或自动停止侦听器。通过使用 START LISTENER 命令和 STOP
LISTENER 命令来控制它。这是缺省值。
QMGR 当队列管理器启动和停止时,同时启动和停止被定义的侦听器。
STARTONLY 当队列管理器启动时,同时启动侦听器,但当队列管理器停止时,不请求停止侦听器。
如:
def listener(QMC01) TRPTYPE(TCP) PORT(1414) CONTROL(QMGR)
1). 启动监听器
start listener(QMC01)
2). 关闭监听器
stop listener(QMC01)
3). 查看监听器状态
dis lsstatus(LISTENER.TCP) all
如:
dis lsstatus(QMC01) all
附一些高级配置的命令:
amqmcert 配置SSL证书
amqmdain 配置windows上的MQ服务
crtmqcvx 转换数据
dmpmqaut 转储对象权限管理
dmpmqlog 转储日志管理
dspmq 显示队列管理器
dspmqaut 显示打开对象的权限
dmpmqcap 显示处理程序容量和处理程序数
dspmqcsv 显示命令服务器状态
dspmqfls 显示文件名
dspmqtrc 跟踪MQ输出(HP-UNIX LINUX Solaris)
dspmqrtn 显示事务的详细信息
endmqcsv 停止队列管理器上的命令服务器
strmqcsv 启动队列管理器上的命令服务器
endmqtrc 停止跟踪
rcdmqimg 向日志写对象的映像
rcmqobj 根据日志中的映像重新创建一个对象
rsvmqtrn 提交或逆序恢复事务
http://www.xinhc.com/document/manual/mqm/csqzzj/csqzzj12.htm
推荐阅读
-
WebSphere MQ常用命令及配置 博客分类: WebSphere MQ WebSphere MQ命令
-
Websphere MQ Java/JMS 客户端的 SSL/AMS 配置 MQJMSIBMSSLJava
-
WebSphere MQ 的高可用配置(网摘)
-
WebSphere MQ 安全系列,第 1 部分: WebSphere MQ 认证及访问权限管理
-
Websphere MQ Java/JMS 客户端的 SSL/AMS 配置 MQJMSIBMSSLJava
-
IBM WebSphere MQ 7.5的基本配置
-
WebSphere MQ 安全系列,第 1 部分: WebSphere MQ 认证及访问权限管理