gpt4 book ai didi

java - 不同源系统和单个消费者的主动 MQ 并发

转载 作者:行者123 更新时间:2023-11-30 10:30:02 29 4
gpt4 key购买 nike

我遇到这个问题,在我的队列中有来自不同源系统的消息。

例如:在第一条消息中,源系统名称为:“X”,在第二条消息中,源系统名称为:“Y”。

目前我有一个并发级别设置为 1 的 JMS 监听器。因此所有消息都按预期一条一条地处理,但现在我想并发处理消息,这样如果消息来自同一源系统,则只有一条消息应该一次针对该源系统处理,如果有针对不同源系统的消息,则它们必须并行执行。

源系统是动态创建的,这就是为什么我不能为每个源系统设置单独的队列和消费者。

如果有人将我推向正确的方向,那就太好了。

最佳答案

听起来您的问题是关于维护来自给定来源的消息的有序传递,但要能够并行处理来自不同来源的消息。

您可以使用 message groups 执行此操作.

The broker allows messaging applications to classify a set of related messages as belonging to a group. This allows a message producer to indicate to the consumer that a group of messages should be considered a single logical operation with respect to the application.

要完成这项工作,让生产者系统将 JMSXGroupID header 设置为生产者系统名称:

Mesasge message = session.createTextMessage("<message />");
message.setStringProperty("JMSXGroupID", "SourceSystem1Name");

然后代理将强制执行属于该组的消息之间的消费顺序。

附录

There might be N numbers of source systems as they are created dynamically and there is a producer which puts all the messages from these N source systems into the queue

因此消息生产者可以将 JMSXGroupID header 设置为源系统的名称。

The problem I'm facing is If the message for one source system is getting processed, other source system messages have to wait till the completion of processing of that message

因此,一旦按照描述设置组 header ,代理将确保它只按顺序向消费者发布给定源系统的消息。它通过强制消费者在释放组中的下一条消息之前发送上一条消息已被处理的确认来实现这一点。

因此,通过将并发设置为某个适当的值,消费者可以并行处理来自不同源系统的消息,但将被迫按顺序处理来自任何给定源系统的消息,这是您需要的行为。

关于java - 不同源系统和单个消费者的主动 MQ 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43777079/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com