我将uuid字段设置为我的出站邮件的JMSCorrelationID。我还将回复设置为Queue并回复Quemanger获取COD。在设置正确的用户标识符之后,我能够在设置的ReplyTo Q中接收COD消息。但是在COD消息中接收的correlationID已经将我的UUID字段的字节截断为32字节。由于这个原因,我无法调和收到COD的信息。发送邮件时请查看以下代码。我省略了ReplyToQ和ReplytoQm部分,但它按预期工作。
if(msgUuidId != null){
msg.setJMSCorrelationID(msgUuidId);
}
logger.info("Setting IBM_REPORT_COD");
msg.setIntProperty(JmsConstants.JMS_IBM_REPORT_COD, MQC.MQRO_COD);
logger.info("Setting JMS_IBM_MQMD_USERIDENTIFIER to :: "+ userid );
msg.setStringProperty(JmsConstants.JMS_IBM_MQMD_USERIDENTIFIER, userid);
我也在目标
上设置MQMD Context((MQDestination) destination).setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
((JmsDestination) destination).setBooleanProperty(WMQConstants.WMQ_MQMD_READ_ENABLED, true);
((JmsDestination) destination).setBooleanProperty(WMQConstants.WMQ_MQMD_WRITE_ENABLED, true);
((MQDestination) destination).setMQMDMessageContext(WMQConstants.WMQ_MDCTX_SET_IDENTITY_CONTEXT);
收到我正在阅读的信息时如下:我正在使用Mule API
String correlationID = (String)eventContext.getMessage().getInboundProperty("JMSCorrelationID");
所以在这里我观察到该值是我设置的uuid的截断十六进制部分。有人可以帮帮我吗?
答案 0 :(得分:1)
Shashi的评论敲响了警钟。可以read here,MQ将JMSCorrelationId
截断为48个十六进制数字/ 24个字节:
注1 :MQMD CorrelId字段可以包含48个十六进制数字(24字节)的标准WebSphere MQ关联ID。 JMSCorrelationID可以是byte []值,包含十六进制字符的字符串值,前缀为" ID:",或者不是以#34; ID:"开头的任意字符串值。前两个表示标准WebSphere MQ Correlation ID,并直接映射到MQMD CorrelId字段或从MQMD CorrelId字段映射(如果适用,用零填充或填充);他们不使用MQRFH2 jms.Cid字段。第三个(任意字符串)使用MQRFH2 jms.Cid字段;字符串的前24个字节(UTF-8格式)写入MQMD CorrelID。
这是否与您所看到的截断相关(双关语)?如果是这样,那么实用的解决方案是使用24字节的相关ID。
干杯,