基于下一条消息内容的Spring Integration聚合器

时间:2017-09-18 20:18:33

标签: spring-integration spring-cloud-stream spring-integration-dsl

我必须读取一个文件并根据第一列拆分每一行和分组行,当第一列值发生变化时,我必须释放前一个组。这可以在Spring集成DSL中完成吗?

这里是文件的样子,它的排序:

x 1 
x 2
x 3
y 4
y 5
y 6

输出应该是两条消息,x = 1,2,3和y = 4,5,6。 由于这没有任何其他关系,关于何时应该对消息进行分组,我可以在下一个非匹配记录时立即对消息进行分组吗?在这种情况下作为儿子,当我在第4行打“y”时,将之前的“x”消息分组并释放它?是否可以使用自定义聚合器?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是依靠groupTimeout(),只要你在一个线程中拆分和聚合就足够快。因此,您的所有记录都将被处理并分发给他们的小组。但由于我们不知道如何释放它们,我们将依赖一些预定的超时。因此,聚合器的配置如下:

 .aggregate(a -> a
            .correlationExpression("payload.column1")
            .releaseStrategy(g -> false)
            .groupTimeout(1000)
            .sendPartialResultOnExpiry(true)
            .outputProcessor(g -> {
                Collection<Message<?>> messages = g.getMessages();

                // iterate and build your output payload                                

                })
            )