我有一些代码正在执行此操作:
String transactionId = incoming.getJMSCorrelationID();
当我使用ActiveMQ进行测试时,我能够通过发送消息并毫无问题地获取此值。但是,当我连接到Websphere时,价值通过前缀为“ID:”我不知道为什么会出现这种情况 - 中间件人告诉我,我的代码必须添加它 - 它不是。
这是一个简单的案例让我删除它,但我想知道为什么会出现这个前缀 - 任何想法?
答案 0 :(得分:5)
我认为中间件人员错了:
来自MQMD MessageID的JMSMessageID
从JMS发送的所有消息都具有WebSphere®MQ分配的唯一消息标识符。分配的值在MQPUT调用之后在MQMD messageId字段中返回,并在JMSMessageID字段中传递回应用程序。 WebSphere MQ messageId是24字节的二进制值,而JMSMessageID是字符串。 JMSMessageID由二进制messageId值组成,该值转换为48个十六进制字符的序列,前缀为字符ID:。 JMS提供了一个提示,可以将其设置为禁用消息标识符的生成。忽略此提示,并在所有情况下分配唯一标识符。在覆盖send()之前设置到JMSMessageId字段的任何值。
来自:Mapping JMS header fields at send() or publish()。
我还记得在使用JMS-WebsphereMQ桥时注意到这个前缀。但实际上 - 你为什么关心? 这是一个 String
id,规范没有说明它的结构,除了它必须是唯一的。
更新:实际上,如 @skaffman 所述,JMS specification需要ID:
前缀:
3.4.3。 JMSMessageID按
所有
JMSMessageID
值必须以前缀“ID:
”开头。独特性 不需要跨不同提供商的消息ID值。
这意味着WebsphereMQ网桥仅添加ID:
前缀以符合JMS规范。而且,正如 @skaffman 所指出的,ActiveMQ不符合它......