0

我们有一个 Spring Integration 项目,其中一个大的输入文件被分解成许多单独的文件,然后使用 Spring Integration Aggregator 重新聚合在一起。

管道中有许多过滤器可以过滤掉不需要的单个文件。我们跟踪为每个相关输入文件过滤的文件数量。我们的@ReleaseStrategy 检查我们是否收到了单个文件的数量减去过滤的单个文件的数量。

如果最后一个要处理的文件在到达我们的 ReleaseStrategy 之前被过滤,会发生什么?ReleaseStrategy 为到达它的每个单独文件调用,如果最后一个单独的文件被过滤,我将不会再次被轮询,但我也希望 Spring 已经预料到这个用例并为它做出了一些非骇客的规定,仍然提供我与@Aggregator 事件。如果我超时或者如果我让所有过滤点检查它们是否是最后一个文件,我不会收到 @Aggregator 事件。

谢谢!

4

1 回答 1

0

Split-filter-aggregate 模式的正确答案是在聚合器 bean 上设置以下属性。

send-partial-result-on-expiry="true"
group-timeout="5000"

这两个属性一起工作以处理与所描述的情况完全相同的情况,其中我们的 ReleaseStrategy 永远不会使用最后一条记录调用,因为最后一条记录已被过滤。一旦达到超时,这些设置将导致排队释放的任何内容。

超时是一个“安静期”,如果在超时内没有收到给定 CorrelationStrategy 的消息,则聚合释放。收到的每条消息都会重置超时。请参阅第 (21) 节: http: //docs.spring.io/spring-integration/reference/htmlsingle/

于 2016-09-13T18:56:57.493 回答