【问题标题】:Java Message selector for getting group Message from websphere mq用于从 websphere mq 获取组消息的 Java 消息选择器
【发布时间】:2019-02-26 02:10:12
【问题描述】:

我正在尝试从 Java mdb 中的 websphere mq 8 队列管理器 接收组消息。 收到LastMessageInGroup 时,我从消息中收到jmsxgroupid,例如'ID:45fdea5589' (getStringProperty)。 当我试图获取该组的其他消息时,我正在使用带有 messageselectormessageconsumer,其中我从上面添加了 jmsxgroupid 和额外的 jmsxsequence,但是当调用该方法时receiveNoWait 来自messageConsumer 我收到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' 时,我们会收到群组消息的其他消息!

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

感谢您的阅读 托马斯

【问题讨论】:

  • 如果您可以发布您的代码可能会有所帮助!

标签: java ibm-mq


【解决方案1】:

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

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

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

【讨论】:

  • Thomas,很高兴您能自己回答这个问题(我也知道这是很久以前的事了),但您能否更新答案以提供 IBM 提供的修复的 APAR,这将帮助将来遇到相同问题的其他人检查他们是否处于包含您提到的修复程序的级别。
【解决方案2】:

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

【讨论】:

  • 嗨,莫拉格,感谢您的回答。我使用收到的未更改的组 id 来查找其他消息作为“ID:8d74 ...”我理解文档的方式是这种表示是字节字符串的表示?
  • 从您的问题看来,您正在对其进行字符串操作。也许你可以按照@Shashi 的要求做并发布你的代码,即不仅仅是在你的文本中写一两行,而是一段适当的代码。
猜你喜欢
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
相关资源
最近更新 更多