JMSCorrelationID前缀为ID:

时间:2012-03-05 09:47:00

标签: java jms

我有一些代码正在执行此操作:

String transactionId = incoming.getJMSCorrelationID();

当我使用ActiveMQ进行测试时,我能够通过发送消息并毫无问题地获取此值。但是,当我连接到Websphere时,价值通过前缀为“ID:”我不知道为什么会出现这种情况 - 中间件人告诉我,我的代码必须添加它 - 它不是。

这是一个简单的案例让我删除它,但我想知道为什么会出现这个前缀 - 任何想法?

1 个答案:

答案 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不符合它......