环境: WAS/MQ7.0(WAS配置MQ的JNDI)
通过mapping JMS 的 Correlation ID 同步接收返回消息,整了一天,总结一下
问题:
在发送消息的时候,把生成的ID 的通过Message 的 setJMSCorrelationID() 的方法set进去
然后在接收消息的时候,通过之前set的CorrelationID 收回的消息是null,发现没有mapping上
原因:
一个是JMS的选择器(selector)写错了,应该写成带'ID:' 前缀的,example:
还有一个,当你把id当成CorrelationID set到Message对象的时候,但消息send到MQ server的时候,有一个相关标识字节的属性,这个属性的值是你set的ID值的16进制,并且是48位的,当你同步接response消息的时候,是通过这个属性去mapping的,而不是你原始set的ID。
解决办法:
当你接消息的时候,把你原始的ID,转成定长48的16进制的String
example:
参考资料:(辛辛苦苦找了半天啊,不容易啊)
特别提醒:
IBM官网说,MQ版本7.0.1.0以上才支持 带ID:前缀的。。。低版本的我不知道怎么实现,欢迎补充。。
官网说明链接:http://www-01.ibm.com/support/docview.wss?uid=swg1IZ37281