【发布时间】:2017-09-22 23:27:54
【问题描述】:
我正在创建一个使用 JMS 使用来自 MQ 的消息的应用程序。我的 MQ 管理器是 IBM WebSphere MQ,我正在使用 IBM jms 实现来使用消息。
消息来来去去都很好。我收到来自另一方的消息,我可以向他们发送消息。问题是在我使用队列中的消息后他们没有收到 COD。他们收到 COA,但没有 COD。
这是我的接收信息代码:
public byte[] readMsgFromClient() throws JMSException {
byte[] message = null;
QueueReceiver reader = null;
try {
connection = getQueueConnection();
connection.start();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(config.getQueueRsp());
((MQQueue) queue).setTargetClient(JMSC.MQJMS_CLIENT_NONJMS_MQ);
reader = session.createReceiver(queue);
JMSBytesMessage byteMessage = (JMSBytesMessage) reader.receive(3000);
if (byteMessage != null) {
message = new byte[(int) byteMessage.getBodyLength()];
byteMessage.readBytes(message);
}
} finally {
if (reader != null) {
reader.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
return message;
}
我必须手动发送 COD 吗?我是否必须将我的 WebSphere 配置为自动发送 COD?我是否必须通知 WebSphere 我的应用程序已使用该消息?
【问题讨论】:
-
所提供的任何一个答案都解决了您的问题吗?
-
不。 COA 不是 MQ 发送的,而是很久以前在一个遥远的星系中制作了一个响应 COA 的 DLL。
-
IBM MQ 7.5 知识中心页面“Types of message”说 COA 和 COD 消息都是
generated by the queue manager。我不确定 DLL 是如何进入其中的? -
我也是!我不知道他们是怎么做到的,但它似乎永远都是这样完成的,当我们让队列管理器自己处理它时,从未发送过 COA,只有 COD。我们搜索了队列和通道的配置,但没有关于 COA 或 COD 的内容。抱歉,我不能提供更多帮助。
-
请注意,COA/COD 是根据消息发送时在 MQMD 中设置的报告选项生成的。如果未设置 COA 报告选项,则队列管理器不会生成它。您可以使用示例 amqsbcg 查看消息的报告选项。如果应用程序正在发送 COA/COD 报告选项,那么 MQ 应该做出响应。我有点不清楚你的问题是没有发送 COD,他们只收到 COA,但是在你的 cmets 中你说 COA 从来没有只发送 COD。我的回答与 COD 有关。我会首先检查发送了哪些报告选项。