我可以停止特定队列吗?

Can I stop a specific queue?

是否可以在 IBM MQ 中通过控制台(命令行)停止队列? 我知道如何使用 endmqm 停止队列管理器。但是我可以 运行 一个控制台命令来停止一个队列吗?

无法独立于队列管理器停止队列。 但是,您可能会发现限制 puts and/or gets on/from 队列可以达到您想要的目标,具体取决于您的设置。这将允许您阻止应用程序向队列添加新消息and/or 从队列中删除消息。

这可以使用 runmqsc 界面中的命令来完成。 https://www.ibm.com/support/knowledgecenter/SSFKSJ_latest/com.ibm.mq.ref.adm.doc/q083460_.htm

以下是您需要的命令:

runmqsc QUEUE_MANAGER_NAME
ALTER QLOCAL('QUEUE_NAME') GET(DISABLED)
ALTER QLOCAL('QUEUE_NAME') PUT(DISABLED)
EXIT

下面是我在队列管理器 MyQM1 上为名为 Q1 的队列禁用 PUT 和 GET 的命令和输出。

mqa(mqcli)# runmqsc MyQM1
5724-H72 (C) Copyright IBM Corp. 1994, 2020.
Starting MQSC for queue manager MyQM1.


ALTER QLOCAL('Q1') GET(DISABLED)
     1 : ALTER QLOCAL('Q1') GET(DISABLED)
AMQ8008I: IBM MQ Appliance queue changed.
ALTER QLOCAL('Q1') PUT(DISABLED)
     2 : ALTER QLOCAL('Q1') PUT(DISABLED)
AMQ8008I: IBM MQ Appliance queue changed.

我建议您先在测试环境中尝试一下,以确保它满足您的需求,并且您的应用程序能够正确处理错误消息。例如。 “队列的 MQGET 调用当前被禁止。(2016)”