我正在尝试从 Java mdb 中的 websphere mq 8 队列管理器接收组消息。
获取 LastMessageInGroup
时,我从消息中收到一个 jmsxgroupid
,例如 'ID:45fdea5589' (getStringProperty
)。
当我尝试获取该组的其他消息时,我使用带有 messageselector
的 messageconsumer
,其中我精确添加 jmsxgroupid
> 上面有一个额外的 jmsxsequence
,但是当从 messageConsumer
调用方法 receiveNoWait
时,我收到一个 Null
BytesMessage
有趣的是,当 groupid
是人类可读的字符串(如“20151019”)时,它就可以工作。
所以这是准则的一部分。
我们在 MDB 的 onMessage 方法中接收 lastMessage。
我们用方法读取这个lastMessage的JMSXGroupID
字符串 gid = lastMessage.getStringProperty("JMSXGroupID")。
然后我们构建一个选择器来获取该组的其他消息,如下所示:
String strSelector = "JMSXGroupID='"+ gid + "' AND JMSXGroupSeq=1";
消费者 = session.createConsumer(destIncoming, strSelector);
bmCurrentMessage = (BytesMessage)consumer.receiveNoWait();
当 gid 类似于“ID:8d74b544d5862f32156cbfe845077c02d18ba33ac51c06aa”时,我们收到空的 BytesMessage! mq 的行为就像队列是空的。
当gid类似于“20151015081515”时,我们会收到群消息的其他消息!
有什么建议我应该做不同的事情吗?
感谢您的阅读 托马斯
最佳答案
经过与 IBM MQ 专家长时间的分析,我们不得不安装 IBM 提供的修复包来解决这个问题。因此,我们的代码显然没有问题,但我们使用的 MQ Server 8 的 IBM 代码内部存在一些问题。
现在通过安装IBM的最新修复程序解决了这个问题。
感谢大家阅读并思考我的问题!
关于用于从 websphere mq 获取组消息的 Java 消息选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33222939/