Spring集成:使用Splitter和Aggregator

时间:2018-04-11 15:57:23

标签: spring-integration spring-integration-dsl

我正在使用FileSplitter逐行读取文件,然后过滤掉一些损坏的行 - 以丢弃一些行 - 以便为每行进行webservices调用。

除此之外我还需要做的是将文件移动到已完成的文件目录。

更新:为了更清楚,过滤后的成功/良好行将需要聚合在一个文件中以写入已完成的目录,并且已损坏/已过滤的行将被写入另一个。

提到上述内容,我不清楚以下几点:

  • 我是否需要消息/行之间的某种关联 手动提供或Spring Integration会为我做吗?
  • 如果由于过滤而丢弃了某些行,那么什么是正确的 与聚合器一起使用的策略?
  • 如何使用文件标记来识别文件的时间 完成移动到完成的目录?

该场景看起来像:

FileSplitter -> line Filter -> Outbound Gateway (webservices) -> Aggregator

1 个答案:

答案 0 :(得分:0)

可以将FileSplitter配置为发出FileSplitter.FileMarker作为第一条消息FileSplitter.FileMarker.Mark.START,最后发布FileSplitter.FileMarker.Mark.END

您可以在拆分器之后添加路由器(PayloadTypeRouter应该足够)以处理不同流中的FileSplitter.FileMarker。如果它是FileSplitter.FileMarker.Mark.END,您只需执行所需的逻辑即可移至已完成的目录

我认为您不需要这种情况的聚合器。

无论如何,可以使用FileSplitter配置setApplySequence(true),以便能够关联聚合器中的下游组。但是你仍然无法知道该组的大小以及时发布它。 FileSplitter.FileMarker.Mark.END在这里仍然有用,虽然我没有看到你的任务的原因。

Reference Manual中有关于此事的一些信息。