一种重置Spring Integration上下文中所有消息的方法

时间:2017-02-20 17:38:58

标签: java spring-integration

我们有一个Spring Integration上下文,包含2个聚合器,一些转换器,适配器等...... 此上下文消耗来自ActiveMQ队列的消息,以及2个Web服务,并将它们放入聚合器中。 我们想要实现的是每次我们在具体队列中收到消息时,我们重置聚合器中的所有消息,并在每个statefull组件中重启每个批处理过程(由队列中的启动消息触发)完全空白和清洁

那么,如何根据队列中收到的消息重置聚合器组件?

1 个答案:

答案 0 :(得分:1)

您的用例对我来说并不清楚,但您可以使用MessageGroupStoreReaper来实现您的目标:

 * Convenient configurable component to allow explicit timed expiry of {@link MessageGroup} instances in a
 * {@link MessageGroupStore}. This component provides a no-args {@link #run()} method that is useful for remote or timed
 * execution and a {@link #destroy()} method that can optionally be called on shutdown.

如果您为聚合器的MessageGroupStore配置它,它将执行从那里注册的回调:

store.registerMessageGroupExpiryCallback(
            (messageGroupStore, group) -> this.forceReleaseProcessor.processMessageGroup(group));

如果您未在聚合器上配置任何其他内容,您的邮件将被丢弃(默认为NullChannel),并且该组将从商店中删除。

因此,当到达那种类型的消息时,您应该调用MessageGroupStoreReaper.run(),然后才将其发送到流程中。