如何在 IBM MQ 中识别集群中的队列列表和队列名称以及在集群中添加/删除队列?

How to identify list of queues and queue names in cluster in IBM MQ and add / remove queues in cluster?

我需要在队列管理器中识别集群队列。我需要输出作为队列名称和集群名称。

将不在集群中的队列添加到集群 从集群中删除队列哪些队列在集群中

要显示在本地队列管理器上设置了 CLUSTERCLUSNL 属性的所有队列,您可以使用 WHERE 参数搜索具有 CLUSTERCLUSNL 属性,即 NE(不等于)到 ''(空白)。

printf "DISPLAY Q(*) WHERE(CLUSTER NE '')\nDISPLAY Q(*) WHERE(CLUSNL NE '')" | runmqsc <qmgr> | grep "QUEUE(" | awk -F'[()]' '{print }'


下面的变体将打印带有 "QUEUE,CLUSTER,CLUSNL" 的 CSV 输出。 printValues 语法来自@mike.dld 对此post ""

的回答

printf "DISPLAY Q(*) WHERE(CLUSTER NE '')\nDISPLAY Q(*) WHERE(CLUSNL NE '')" | runmqsc <qmgr> | grep -o '^\w\+:\|\w\+[(][^)]\+[)]' | awk -F '[()]' -v OFS="," 'function printValues() { if ("QUEUE" in p) { print p["QUEUE"], p["CLUSTER"], p["CLUSNL"] } } /^\w+:/ { printValues(); delete p; next } { p[] = } END { printValues() }'


要显示所有未在本地队列管理器上设置 CLUSTERCLUSNL 属性的队列,您可以使用 WHERE 参数搜索带有 CLUSTERCLUSNL 属性,即 EQ(等于)到 ''(空白)。 sort、uniq 和 awk 帮助仅显示两者均为空白的那些。

printf "DISPLAY Q(*) WHERE(CLUSTER EQ '')\nDISPLAY Q(*) WHERE(CLUSNL EQ '')" | runmqsc <qmgr> | grep "QUEUE(" | awk -F'[()]' '{print }' | sort | uniq -c | awk '{ if ( ~ /2/) {print }}'


要将队列添加到集群,您需要 ALTERCLUSTER 属性设置为有效集群的名称。也可以使用CLUSNL属性指定一个NAMELISTNAMELIST必须至少包含一个簇名,但可以包含多个簇名,允许队列在多个簇中。

echo "ALTER QL(TEST.Q) CLUSTER(RAJCLUS)" | runmqsc <qmgr>


要从集群中删除队列,您需要清空 CLUSTERCLUSNL 属性。

echo "ALTER QL(TEST.Q) CLUSTER('') CLUSNL('')" | runmqsc <qmgr>