我们有一个Spring Integration上下文,包含2个聚合器,一些转换器,适配器等...... 此上下文消耗来自ActiveMQ队列的消息,以及2个Web服务,并将它们放入聚合器中。 我们想要实现的是每次我们在具体队列中收到消息时,我们重置聚合器中的所有消息,并在每个statefull组件中重启每个批处理过程(由队列中的启动消息触发)完全空白和清洁
那么,如何根据队列中收到的消息重置聚合器组件?
答案 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()
,然后才将其发送到流程中。