Jakarta ee 设置WMQ\u MDCTX\u SET\u IDENTITY\u上下文会影响COD消息

Jakarta ee 设置WMQ\u MDCTX\u SET\u IDENTITY\u上下文会影响COD消息,jakarta-ee,jms,mule,ibm-mq,mq,Jakarta Ee,Jms,Mule,Ibm Mq,Mq,我曾经问过这个问题: 根据响应,我甚至可以设置MQ记帐令牌。但是这些变化已经对我们之前收到的COD产生了影响。我们将回复设置为Q,并将回复设置为Q经理,如下所示 Destination codeDestination = session.createQueue("queue://" + replyToQueueMgr + "/" +replyToQueueName); logger.info(":::: codeDestination :::"+ codeDestination); msg.se

我曾经问过这个问题:

根据响应,我甚至可以设置MQ记帐令牌。但是这些变化已经对我们之前收到的COD产生了影响。我们将回复设置为Q,并将回复设置为Q经理,如下所示

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);

但即使这样,我也得不到鳕鱼。这似乎是造成问题的唯一原因。我正在设置MQMDReadEnabled和MQMDWriteEnabled属性的其他行没有引起任何问题。由于我需要COD和记帐令牌,请有人帮助我解决这个问题吗?

看起来COD消息将在队列管理器死信队列(DLQ)中结束。您是否为队列管理器定义了DLQ?如果已定义,请检查DLQ

COD消息出现在DLQ中的原因可能是用户权限不足。请检查此链接:

在发送消息时设置有效的用户标识符应该会有所帮助。我尝试使用mqv8,可以看到COD消息被放在我在发送消息时指定的应答队列中

requestMessage.setStringProperty(JmsConstants.JMS_IBM_MQMD_USERIDENTIFIER, "<valid user id>");
requestMessage.setStringProperty(JmsConstants.JMS_IBM_MQMD_USERIDENTIFIER,”;

谢谢shashi…我将在这里检查这一个问题。我注意到,当我不设置上下文时,JMS_IBM_MQMD_USERIDENTIFIER的值默认为某个值,但当我设置上下文时,它变为空?有没有办法获得默认值我需要想办法设置MQPMO_ALTERNATE_USER_权限