Spring integration spring集成dsl缓冲区

Spring integration spring集成dsl缓冲区,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,我有一个要求,即我需要保存/缓冲在通道上接收的消息,并根据消息数在数据库中保持,或者超时意味着1分钟内没有收到消息。 有没有办法在spring集成中实现这一点 IntegrationFlows .from(Jms.messageDrivenChannelAdapter(connectionFactory) .destination(sourceQueue)) .transform(someTr

我有一个要求,即我需要保存/缓冲在通道上接收的消息,并根据消息数在数据库中保持,或者超时意味着1分钟内没有收到消息。 有没有办法在spring集成中实现这一点

IntegrationFlows
                .from(Jms.messageDrivenChannelAdapter(connectionFactory)
                    .destination(sourceQueue))
                .transform(someTransform, "transform")
                .handle(someService, "save")
                .get();

有一个基于
聚合器的
.aggregate()
操作符

您可以使用
JdbcMessageStore
配置它来缓冲消息并将它们存储到数据库中

您可以通过
ReleaseStrategy
(根据收到的每条消息)将它们保持在那里直到出现某种情况,或者由于
组超时而将它们释放


如果您不感兴趣地将它们全部作为单个聚合消息,则可以考虑使用<代码> SimeMeimeGracePuthor ,它只产生一个<代码>集合,我们希望在没有相关关系的情况下累积消息,我们看到以下错误

,原因是:java.lang.IllegalStateException:不允许空相关。可能CorrelationStrategy失败了?
通过此更改
.aggregate(aggregatorSpec->aggregatorSpec.releaseStrategy(group->group.size()>2))
您可以执行静态correlationKey:
.CorrelationStrategy(m->1)
。此外,您还需要确保expireGroupsUponCompletion(true)
。感谢
。聚合(aggregatorSpec->aggregatorSpec.CorrelationsStrategy(m->1)。expireGroupsUponCompletion(true)。释放策略(new TimeoutCountSequenceSizeReleaseStrategy(2100))
如果没有
,上述策略不起作用。expireGroupsUponTimeout(true).groupTimeout(2000)
即使我们使用的是
TimeoutCountSequenceSizeReleaseStrategy
TimeoutCountSequenceSizeReleaseStrategy
只有当消息到达聚合器时,
TimeoutCountSequenceSizeReleaseStrategy
才会执行其逻辑。
groupTimeout()
在特定时间内没有传入消息时执行一些后台任务的点。