Java 用于从 websphere mq 获取组消息的消息选择器
Java Message selector for getting group Message from websphere mq
我正在尝试从 Java mdb 中的 websphere mq 8 队列管理器 接收组消息。
收到 LastMessageInGroup
时,我从消息中收到 jmsxgroupid
,例如 'ID:45fdea5589' (getStringProperty
)。
当我试图获取该组的其他消息时,我正在使用 messageconsumer
和 messageselector
,我正在添加 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 的最新补丁解决了这个问题。
感谢大家阅读和思考我的问题!
我正在尝试从 Java mdb 中的 websphere mq 8 队列管理器 接收组消息。
收到 LastMessageInGroup
时,我从消息中收到 jmsxgroupid
,例如 'ID:45fdea5589' (getStringProperty
)。
当我试图获取该组的其他消息时,我正在使用 messageconsumer
和 messageselector
,我正在添加 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 的最新补丁解决了这个问题。
感谢大家阅读和思考我的问题!