微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IBM MQ 消息组

如何解决IBM MQ 消息组

我目前面临一个用例,我需要并行处理多条消息,但相关消息一次只能由一个 JMS 使用者处理。

例如,考虑消息 ABCDEF 和 DEFGHI,后跟序列号:

  • ABCDEF-1
  • ABCDEF-2
  • ABCDEF-3
  • DEFGHI-1
  • DEFGHI-2
  • DEFGHI-3

如果可能,我希望 JMS 消费者并行处理 ABCDEF 和 DEFGHI 消息,但绝不要在两个或多个消费者之间同时处理两个 ABCDEF 或 DEFGHI 消息。在我的用例中,消息的顺序无关紧要。 我无法使用 JMS 过滤器,因为我不会提前知道组名,而且拥有组名的静态列表是不可行的。。消息是通过一个不受我控制的系统发送的,组名总是由 6 个字母组成。

ActiveMQ 似乎通过其 message groups 特性实现了这一点,但我在 IBM MQ 中找不到等效的功能。我的理解是这种行为是由 JMSXGroupId 和 JMSXGroupSeq 标头驱动的,它们仅在 JMS 规范的可选部分中定义。

作为一种变通方法,我总是可以有一个集结地(可能是一个数据库),在那里放置所有消息,然后对该数据库进行快速轮询,但在这里添加额外的基础设施似乎有点过分。此外,它也不允许我使用 JMS 事务在发生故障时进行重新处理。

对我来说,这似乎是消息传递架构中的一个常见用例,但我在网上的任何地方都找不到简单的是/否答案,而且 IBM MQ 文档也不太清楚是否支持功能

提前致谢

解决方法

IBM MQ 也有消息组的概念。

IBM MQ 消息头,称为消息描述符 (MQMD),其中包含几个字段,JMS 组字段映射到这些字段:-

  • JMSXGroupID -> MQMD GroupID 字段
  • JMSXGroupSeq -> MQMD MsgSeqNumber 字段

在此处阅读更多内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。