我必须读取一个文件并根据第一列拆分每一行和分组行,当第一列值发生变化时,我必须释放前一个组。这可以在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”消息分组并释放它?是否可以使用自定义聚合器?
答案 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
})
)