运行 MQSC 命令通过 SYSTEM.ADMIN.COMMAND.EVENT

Run MQSC Command via SYSTEM.ADMIN.COMMAND.EVENT

我已在 Windows 上通过 MQ Explorer 远程连接到 QMgr。 MQ服务器版本为7.5.0.1。我可以从 MQ Explorer 成功地将消息放入 SYSTEM.ADMIN.COMMAND.EVENT,当我转储 SYSTEM.ADMIN.COMMAND.EVENT 时,我可以看到我的消息。据我所知,我应该能够通过此通道 运行 PCF 命令和 MQSC 命令。因此,我将 DISPLAY QMGR ALL 消息放入此队列中,我可以在 MQ 服务器上成功看到此消息。我的问题是如何通过此频道远程 运行 此消息?谢谢。

IBM Doc 指出我应该能够在 SYSTEM.MQSC.REPLY.QUEUE 中收到命令结果。但我无法从客户端 MQ Explorer 浏览此队列。此队列的队列类型为 Model.

命令服务器不处理文本消息,它处理 PCF 消息。你需要建立一个PCF格式的消息,它可以被处理。参见 http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.adm.doc/q019980_.htm

理想情况下,您会使用真正的 PCF 格式,但有一种 PCF 格式,您可以在其中发送 MQSC 命令('escaped' PCF - 请参阅此处 http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.ref.adm.doc/q087230_.htm?lang=en

这里有几个问题。

首先,您使用了错误的队列。命令服务器侦听 SYSTEM.ADMIN.COMMAND.QUEUE。您要向其发送消息的队列,SYSTEM.ADMIN.COMMAND.EVENT 是 QMgr 在执行命令后将事件消息放入的队列,当然前提是命令事件已启用。

正如 Jason 提到的,第二个问题是 runmqsc 处理器采用人类可读的脚本并将其转换为 QMgr 可以理解的命令。将文本命令直接传递到命令服务器是行不通的。

通常我们通过将命令直接传递给 运行mqsc 来完成您想要的操作,例如...

echo DISPLAY QMGR ALL | runmqsc MYQMGRNAME

如果您需要作为客户端执行此操作的能力,那么您需要下载 SupportPac MO72, or head over to MQ Gem and pick up a copy of MQSCX。它们中的任何一个都将在本地队列管理器上接受上述命令,并且都可以提供 MQ 通道参数并连接到远程 QMgr。

除了这个基本功能之外,MQSCX 产品还有自己的内部脚本解析和执行。例如,假设您想根据 QMgr 的命令级别执行某些操作。

使用 runmqsc 您可以发出上面的命令,通过 grepawk 或类似方法过滤生成的 2 列输出,然后将最终输出捕获到一个变量中。您可能需要多次执行此操作以捕获多个值,每次调用一个新的 runmqsc 并解析脚本中的输出。然后,您必须在开始所有这些时为您想要 运行 的实际命令生成字符串,并将其传递给 runmqsc.

的另一个调用

或者,MQSCX 允许您发出 DISPLAY 命令,然后通过名称直接引用结果值。例如,您可以向 MQSCX 传递几行脚本,告诉它查询 QMgr,然后根据命令版本采取有条件的操作,所有这些都无需返回 shell、bat 或 Perl 脚本。

完全公开,我不为 MQ Gem 工作或从中收取佣金。我只是不喜欢用头撞墙写 100 行代码,而 2 行代码就可以了。如果您执行任何数量的 MQSC 脚本,MQSCX 上的投资回报率以分钟为单位。它恰好 100% 切合主题地回答了这个问题。