我正在尝试编写一个小型应用程序,该应用程序使用Java连接到队列管理器并对其发出一些命令。

通过阅读文档,我了解到必须通过在“SYSTEM.ADMIN.COMMAND.QUEUE”队列中发送命令来发出命令。

但是,由replyToQueueName定义的回复队列在执行后仍然为空。

有什么我想念的吗?

这是该代码的简化版本:

MQQueueManager qMgr = new MQQueueManager("SOME_HOSTNAME");

MQQueue qOut = qMgr.accessQueue("SYSTEM.ADMIN.COMMAND.QUEUE", MQC.MQOO_OUTPUT);
MQQueue qIn = qMgr.accessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE", MQC.MQOO_INPUT_AS_Q_DEF);

MQMessage message = new MQMessage();
message.writeUTF("DISPLAY QMGR ALL");
message.messageType = MQC.MQMT_REQUEST;
message.format = MQC.MQFMT_STRING;
message.replyToQueueName = "SYSTEM.DEFAULT.LOCAL.QUEUE";

qOut.put(message, new MQPutMessageOptions());

MQMessage retrievedMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_CONVERT;

qIn.get(retrievedMessage, gmo);

最佳答案

命令处理器希望以可编程命令格式(PCF)格式接收消息。请参阅 com.ibm.mq.pcf 类和Programmable Command Formats and Administration Interface手册。

根据您使用的MQ客户端的版本,您可能需要从SupportPac MS0B下载PCF Java类。但是,强烈建议您使用最新的MQ客户端进行开发。当前的客户端将始终与早期的WMQ服务器版本V7一起使用,并退回到这些平台上可用的功能级别。这样可以确保至少支持您的客户端类,而不支持较旧的版本(例如V5.3或V6)。

V7.0 MQ客户端以SupportPac MQC7的形式提供。
V7.5 MQ客户端以SupportPac MQC75的形式提供。
V8.0 MQ客户端以SupportPac MQC80的形式提供。

10-04 20:18