我正在尝试从Java mdb中的 websphere mq 8队列管理器接收组消息。
获取LastMessageInGroup
后,我会从邮件中收到jmsxgroupid
个'ID:45fdea5589'(getStringProperty
)。
当我尝试获取此群组的其他消息时,我正在使用messageconsumer
和messageselector
我正在添加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'时,我们会收到群组留言的其他消息!
任何提示我应该做些什么不同?
感谢雷丁到目前为止 托马斯
答案 0 :(得分:1)
经过长时间与IBM的MQ专家一起分析后,我们不得不安装IBM提供的修复包来解决这个问题。所以我们的代码显然没有问题,但我们使用的MQ Server 8的IBM代码中存在一些问题。
现在通过安装最新的IBM修复程序解决了这个问题。
感谢所有人阅读和思考我的问题!
答案 1 :(得分:0)
请记住,GroupID与MessageID和CorrelationID一样,不是字符串字段。你说它是一个人类可读的字符串,它意味着它失败的时候是GroupID不是人类可读的时候。这表明您没有为组中的后续消息请求正确的GroupID,因为您已对其执行了字符串处理。将其视为字节字符串而不是字符串。