Spring Integration去抖/重复数据删除

时间:2016-10-07 12:01:47

标签: java spring spring-integration

Spring Integration中是否有一些组件可用于在指定的时间范围内过滤掉重复项?

我正在寻找像Debounce from ReactiveX

这样的东西

在我的项目中,我发送一个包含UUID的Payload,如果在10秒内通过队列发送,我希望过滤掉具有相同UUID的多个Payload - 然后我想只让最后一个通过只要在接下来的10秒内没有其他具有相同UUID的Payload。

2 个答案:

答案 0 :(得分:4)

感谢@Apokralipsa我能够通过添加以下聚合器来实现这一点:

<int:aggregator
            input-channel="enrichedChannel"
            output-channel="aggregatedChannel"
            group-timeout-expression="size() ge 1 ? 10000 : -1"
            send-partial-result-on-expiry="true"
            expire-groups-upon-timeout="true"
            correlation-strategy-expression="payload.id"
            release-strategy-expression="false" />

答案 1 :(得分:3)

您可以使用aggregator来实现此目的。您需要设置的是

  • 识别重复邮件的关联策略
  • 将单个邮件视为已完成组的发布策略
  • expire-groups-upon-completionfalse,以便在完成并发送后不会删除该组
  • group-timeout例如,持续10秒
  • expire-groups-upon-timeout保留为true(默认情况下是这样)

参考文献:

  

expire-groups-upon-completion)设置为true(默认为false)时,将从邮件存储中删除已完成的组,从而允许具有相同关联的后续邮件组成新组。默认行为是将与已完成组具有相同相关性的消息发送到丢弃信道。