【发布时间】:2013-07-13 02:55:35
【问题描述】:
我有一个 spring 应用程序,我想使用 JMS Message Groups 来处理特定块中的 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 中做过类似的事情吗?
【问题讨论】: