MQ 相关命令,及自动化脚本的编写
1,MQ的相关命令
-
查看队列管理器运行状态
# dspmq
显示结果中QMNAME表示MQ队列管理器的名称,STATUS表示当前运行状态。
运行状态有如下几种:
Starting 正在启动
Running 正在运行
Ending 正在停止
Ended normally 已经正常终止
Ended immediately 已经立即终止
Ended preemtively 已经强制终止
Ended unexpectively 异常终止
注:停止MQ后建议使用dspmq命令进行状态检查是否成功关闭。
二.查看通道运行状态与启停通道
$ runmqsc QmgrName
dis chl(*); 查看所有通道定义
dis chs(*); 查看所有通道状态,如果没有查询到通道状态,或报错AMQ8420: Channel Status not found,请启动通道
dis chs(ChannelName); 查看通道ChannelName的状态
通道状态有如下几种:
STARTING 正在启动
BINDING 正在绑定
INITIALIZING 正在初始化
RUNNING 正常
STOPPING 正在停止
RETRYING 重试
PAUSED 等待
STOPPED 已停止
REQUESTING 请求
启停通道与重置通道序号的方法:
$ runmqsc QmgrName
start chl(ChannelName); 启动通道
stop chl(ChannelName); 停止通道
reset channel(ChannelName); 重置通道序号。
-
三.查看通道监听状态与启停监听
$ runmqsc QmgrName
dis listener(*); 查看通道监听定义
dis lsstatus(listnerName); 查看监听状态
启动与停止监听的方法:
$ runmqsc
start lstr(listnerName); 启动监听
stop lstr(listnerName); 停止监听
四.查看队列深度
如果队列深度不断增加,不见减少,那么可能就有问题了,请检查并分析其原因。
$runmqsc QmgrName
dis q(*); 查看所有各类队列的属性
dis qlocal(QName); 查看所有本地队列的属性
队列深度属性为:CURDEPTH
五.查看死信队列深度
如果死信队列深度不断增加,那就需要分析其原因。
$runmqsc QmgrName
dis qlocal(DEADQName)
2、相应的脚本
Linux:
out = run_cmd('su - {} -c "{}<<EOF\nDISPLAY QUEUE(\'{}\') IPPROCS;\nEND\nEOF"'.format(os_mq_user, cmd,name))[1] # 执行命令的查询方式,替换相应的命令可以获取你想要查询的结果
su - mqm -c "/opt/mqm/bin/runmqsc QMSZCNbak<<EOF
start channel('QT_SZ_Hzcn_bak');
END
EOF"
Windows:
if 'Windows' in platform.system(): with open('channelnum.in', 'w') as f: f.write('dis queue(\'{}\') CURDEPTH;\nEND'.format(name)) cmd = 'runmqsc {}< "channelnum.in" > "channelnum.out"'.format(qname) #print cmd run_cmd(cmd)[1] with open("channelnum.out", 'r') as f: out = ''.join(f.readlines()) #Windows需要写入文件,去执行,替换相应的命令即可