之前我曾问过这个问题:MQDestination overriding accounting token value
根据回复,我甚至可以设置MQ Accounting令牌。但是这些变化导致了我们之前收到的对COD的影响。我们将答复设置为Q并回复Q Manager,如下所示
Destination codeDestination = session.createQueue("queue://" + replyToQueueMgr + "/" +replyToQueueName);
logger.info(":::: codeDestination :::"+ codeDestination);
msg.setJMSReplyTo(codeDestination);
使用上面我们用来在发送的队列上正确获取COD。但在我添加以下行以支持会计令牌
之后((MQDestination) destination).setMQMDMessageContext(WMQConstants.WMQ_MDCTX_SET_ALL_CONTEXT);
添加上述行后COD不来了。如果我注释掉上面的行,COD会再次开始,但这意味着会计令牌不会被设置。我也尝试过以下一行
((MQDestination) destination).setMQMDMessageContext(WMQConstants.WMQ_MDCTX_SET_IDENTITY_CONTEXT);
但即便如此,我也没有得到COD。它只是这种背景似乎导致了这个问题。我设置MQMDReadEnabled和MQMDWriteEnabled属性的其他行没有引起任何问题。有人请帮助我,因为我需要COD和Accounting Token吗?
答案 0 :(得分:2)
看起来COD消息最终在队列管理器死信队列(DLQ)中。您是否为队列管理器定义了DLQ?如果已定义,请检查DLQ。
在DLQ中结束COD消息的原因可能是因为用户权限不足。请检查此链接:http://www-01.ibm.com/support/docview.wss?uid=swg1IZ76359。
在发送消息时设置有效的用户标识符应该会有所帮助。我尝试使用MQ v8,我可以看到COD消息被发送到我在发送消息时指定的回复队列。
requestMessage.setStringProperty(JmsConstants.JMS_IBM_MQMD_USERIDENTIFIER, "<valid user id>");