我有一个 spring 应用程序,我想使用JMS 消息组来处理特定块中的 JMS 消息(以及相同的事务等)。基本上说我有 5 个相关事件,我有一个JMSTemplate
以相同JMSXGroupID
和连续的JMSXGroupSeq
值发送它们。
然后我MessageProcessorService
在 Spring 中定义了一个看起来像这样的东西:
<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 中还有其他人做过类似的事情吗?