IBM MQ队列筛选、格式化及队列深度查询技术咨询
IBM MQ队列筛选、格式化及队列深度查询技术咨询
嘿,我来帮你搞定IBM MQ队列深度查询和输出优化的问题~ 你的基础查询思路是完全正确的,下面我会一步步拆解命令、解析原生输出,再给你一套能把输出整理得整整齐齐的优化方案。
一、基础队列深度查询命令
你使用的这条命令已经能精准查询匹配QE*规则的本地队列及其深度,我再帮你拆解下每个部分的作用:
echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME
DISPLAY QLOCAL(QE*):指定查询名称以QE开头的本地队列(QLOCAL是IBM MQ中本地队列的类型标识)WHERE(CURDEPTH GE 0):筛选条件,包含所有队列深度≥0的队列(也就是所有匹配规则的队列,因为队列深度不可能为负数)runmqsc QMNAME:连接到名为QMNAME的队列管理器,执行后续的MQSC命令
二、原生输出的问题解析
你提供的原生输出是runmqsc的默认格式,虽然信息完整,但队列名较长时会自动换行,导致队列名和深度的排版很零散,可读性打折扣:
5724-H72 (C) Copyright IBM Corp. 1994, 2023. Starting MQSC for queue manager QMNAME. 1 : DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) AMQ8409I: Display Queue details. QUEUE(QE.QUEUE.NAME1) TYPE(QLOCAL) CURDEPTH(2) AMQ8409I: Display Queue details. QUEUE(QE.QUEUE.NAME2) TYPE(QLOCAL) CURDEPTH(90) AMQ8409I: Display Queue details. QUEUE(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3) TYPE(QLOCAL) CURDEPTH(1) ...
别担心,我们用文本处理工具就能轻松把它改成整齐的列表格式。
三、格式化输出优化方案
通过awk脚本可以自动提取队列名和深度字段,不管原生输出怎么换行,都能输出整齐的对应关系。直接执行以下命令即可:
echo "DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0)" | runmqsc QMNAME | awk ' # 每个队列块开始时,重置队列名和深度变量 /^AMQ8409I/ { queue="" ; depth="" } # 提取QUEUE字段的纯名称,去掉前后括号 /QUEUE\(/ { sub(/^QUEUE\(/,"",$0) sub(/\).*/,"",$0) queue=$0 } # 提取CURDEPTH字段的纯数字,去掉前后括号 /CURDEPTH\(/ { sub(/^CURDEPTH\(/,"",$0) sub(/\).*/,"",$0) depth=$0 } # 当队列名和深度都获取到后,按固定宽度整齐打印 queue != "" && depth != "" { printf "%-50s %d\n", queue, depth queue="" ; depth="" } '
优化后的示例输出:
QE.QUEUE.NAME1 2 QE.QUEUE.NAME2 90 QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3 1 QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4 0 QE.QUEUE.NAME5 0 ...
额外实用技巧
- 要是只想看有消息堆积的队列(深度>0),把WHERE条件改成
WHERE(CURDEPTH GT 0)就行 - 要查询所有本地队列,把
QLOCAL(QE*)替换成QLOCAL(*) - 想把结果存成报告文件?在命令末尾加
> queue_depth_report.txt就能导出到文件里
备注:内容来源于stack exchange,提问作者markfree
相关产品推荐
相关产品推荐

