【发布时间】:2021-08-02 14:16:00
【问题描述】:
我目前面临一个用例,我需要并行处理多条消息,但相关消息一次只能由一个 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 规范的 optional 部分中定义。
作为一种解决方法,我总是可以有一个临时场地(也许是一个数据库),所有消息都放置在这个地方,然后在这个数据库上进行快速轮询,但是在这里添加一个额外的基础设施似乎有点矫枉过正。此外,它也不允许我在发生故障时使用 JMS 事务进行重新处理。
对我来说,这似乎是消息传递体系结构中的一个常见用例,但我无法在网上任何地方找到简单的“是/否”答案,而且 IBM MQ 文档也不太清楚是否支持此功能。
提前致谢
【问题讨论】:
-
Ibm mq 不支持您突出显示的 ActiveMQ 消息组功能之类的功能。您需要使用 Morag 指出的标头字段编写自己的逻辑。
-
谢谢 Josh,您是否有一个指向 IBM MQ 文档页面的链接,该链接明确指出任何机会都不支持此功能?我希望有一些有用的链接可以解释我们如何自己实现它……这听起来像是消息代理的典型用例,但我可能错了。
-
由于它没有这样的功能,我不希望有一个文档页面说明它没有该功能。
标签: jms ibm-mq message-queue messaging