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