Spring integration spring集成dsl缓冲区
我有一个要求,即我需要保存/缓冲在通道上接收的消息,并根据消息数在数据库中保持,或者超时意味着1分钟内没有收到消息。 有没有办法在spring集成中实现这一点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
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()
在特定时间内没有传入消息时执行一些后台任务的点。