Java 用于从 websphere mq 获取组消息的消息选择器

Java Message selector for getting group Message from websphere mq

我正在尝试从 Java mdb 中的 websphere mq 8 队列管理器 接收组消息。 收到 LastMessageInGroup 时,我从消息中收到 jmsxgroupid,例如 'ID:45fdea5589' (getStringProperty)。 当我试图获取该组的其他消息时,我正在使用 messageconsumermessageselector,我正在添加 jmsxgroupid 和额外的 jmsxsequence从上面,但是当从 messageConsumer 调用方法 receiveNoWait 时,我收到 Null BytesMessage

有趣的是,当 groupid 是像 '20151019' 这样的人类可读字符串时,它起作用了。

所以这是准则的一部分。
我们在 MDB 的 onMessage 方法中接收到 lastMessage。
我们使用方法
读取了这个 lastMessage 的 JMSXGroupID 字符串 gid = lastMessage.getStringProperty("JMSXGroupID")。 然后我们构建一个选择器来获取该组的其他消息,如下所示:
字符串 strSelector = "JMSXGroupID='" + gid + "' AND JMSXGroupSeq=1";
消费者 = session.createConsumer(destIncoming, strSelector);
bmCurrentMessage = (BytesMessage) consumer.receiveNoWait();
当 gid 类似于 'ID:8d74b544d5862f32156cbfe845077c02d18ba33ac51c06aa' 时,我们会收到一个空的 BytesMessage! mq 就像队列是空的一样。
当 gid 类似于“20151015081515”时,我们会收到群消息的其他消息!

我应该做什么不同的提示?

感谢阅读 托马斯

请记住,GroupID 与 MessageID 和 CorrelationID 一样,不是字符串字段。你说当它是一个人类可读的字符串时它起作用,这意味着当 GroupID 不是人类可读的时候它对你失败的时间。这表明您没有为组中的后续消息请求正确的 GroupID,因为您已经对其进行了字符串处理。将其视为字节串而不是字符串。

经过与IBM MQ 专家的长期分析,我们不得不安装IBM 提供的修复包来解决这个问题。所以我们的代码显然没有问题,但我们使用的 MQ Server 8 的 IBM 代码内部存在一些问题。

现在通过安装 IBM 的最新补丁解决了这个问题。

感谢大家阅读和思考我的问题!