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

时间:2015-10-19 20:04:19

标签: java ibm-mq

我正在尝试从Java mdb中的 websphere mq 8队列管理器接收组消息。 获取LastMessageInGroup后,我会从邮件中收到jmsxgroupid'ID:45fdea5589'getStringProperty)。 当我尝试获取此群组的其他消息时,我正在使用messageconsumermessageselector我正在添加jmsxgroupid并添加jmsxsequence从上面开始,但是当从receiveNoWait调用方法messageConsumer时,我收到Null BytesMessage

有趣的是,当groupid是人类可读的字符串,如' 20151019 '时,它可以工作。

所以这是守则的一部分 我们在MDB的onMessage方法中接收lastMessage 我们用方法
来读取这个lastMessage的JMSXGroupID     String gid = lastMessage.getStringProperty(“JMSXGroupID”)。 然后我们构建一个选择器来获取该组的其他消息,如下所示:
    String strSelector =“JMSXGroupID ='”+ gid +“'AND JMSXGroupSeq = 1”;

    consumer = session.createConsumer(destIncoming,strSelector);
    bmCurrentMessage =(BytesMessage)consumer.receiveNoWait();
当gid像'ID:8d74b544d5862f32156cbfe845077c02d18ba33ac51c06aa'时,我们收到一个null BytesMessage! mq就像队列是空的一样 当gid像'20151015081515'时,我们会收到群组留言的其他消息!

任何提示我应该做些什么不同?

感谢雷丁到目前为止 托马斯

2 个答案:

答案 0 :(得分:1)

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

现在通过安装最新的IBM修复程序解决了这个问题。

感谢所有人阅读和思考我的问题!

答案 1 :(得分:0)

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