【发布时间】:2014-07-10 18:46:55
【问题描述】:
我将 uuid 字段设置为 JMSCorrelationID 到我的出站消息。我还将回复设置为 Queue 并回复 Quemanger 以获取 COD。设置正确的用户标识符后,我能够在设置的 ReplyTo Q 中接收 COD 消息。但是在 COD 消息中收到的相关 ID 已将我的 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 上下文
((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 的截断十六进制部分。有人可以帮我解决这个问题吗?
【问题讨论】:
-
MQ 中的关联 ID 为 24 字节长。如果您使用超过 24 个字节的关联 ID,它将被截断。
-
msUuidId是什么类型?我似乎记得 JMS 规范区分字节数组和字符串,第一个是特定于提供程序的,而第二个是特定于应用程序的。 -
但是首先当我没有设置MQMD上下文时,我用来获取相关ID的所有字节?设置 MQMD 上下文后,此问题开始出现?
-
我们可以将 32 字节的 uuid 设置为标头中可以用来关联的其他字段的一部分,而不是关联 ID??