gpt4 book ai didi

java - 使用 Spring MessageListener 分组消费消息?

转载 作者:行者123 更新时间:2023-11-30 11:41:37 27 4
gpt4 key购买 nike

我有一个 spring 应用程序,我想使用 JMS Message Groups处理特定 block 中的 JMS 消息(以及相同的事务等)。基本上说我有 5 个相关事件,我有一个 JMSTemplate,它用相同的 JMSXGroupID 和连续的 JMSXGroupSeq 值发送它们。

然后我有一个在 Spring 中定义的 MessageProcessorService,看起来像这样:

<bean id="messageProcessorService" class="x.y.z.MessageProcessorService"/>
<jms:listener-container connection-factory="pooledJmsConnectionFactory" concurrency="5" >
<jms:listener destination="messages.queue" ref="messageProcessorService" />
</jms:listener-container>

我的 MessageProcessorService 是标准的,简单的:

@Service
public class MessageProcessorService implements MessageListener {

public void onMessage(Message msg) { ... }
}

问题是,因为 onMessage 一次只能收到 1 条消息。如何获取特定组中的所有 5 条消息,然后开始处理它们?

我知道我可以使用一个负的 JMSXGroupSeq 值来标记一个组的结束,然后我想我可以保留一个小的消息列表并检查消息 JMSXGroupSeq 当它是 -1 时,然后处理整个组,但这看起来有点 hacky 并且不确定它是否是线程安全的(我肯定需要并行处理多个线程)。

以前有没有其他人在 Spring/JMS/ActiveMQ 中做过类似的事情?

最佳答案

为了回答我自己的问题,我找到了 this approach并做了大致相似的事情。虽然它并不漂亮。我认为从长远来看,我们可能不得不放弃 MessageListenerContainer 并使用直接的 JMS api 推出我们自己的解决方案。

关于java - 使用 Spring MessageListener 分组消费消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12188204/

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