Spring 集成:使用 Splitter 和 Aggregator
Spring integration: use Splitter and Aggregator
我正在使用 FileSplitter 逐行读取文件,然后过滤一些损坏的行 - 丢弃一些行 - 以便对每一行进行网络服务调用。
除此之外我需要做的是将文件移动到完成的文件目录。
更新: 只是为了更清楚,过滤后的 successful/good 行将需要聚合在一个文件中以写入完成的目录和 corrupted/filtered 行将被写入另一行。
说到上面,我不清楚以下几点:
- 我需要 messages/lines 之间的某种相关性吗?
手动提供或 Spring 集成会为我做吗?
- 如果过滤掉了一些行,那么正确的是什么
与聚合器一起使用的策略?
- 如何使用文件标记来识别文件何时
完成移动到完成目录?
场景简单如下:
FileSplitter -> line Filter -> Outbound Gateway (webservices) -> Aggregator
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 中有一些关于此事的信息。
我正在使用 FileSplitter 逐行读取文件,然后过滤一些损坏的行 - 丢弃一些行 - 以便对每一行进行网络服务调用。
除此之外我需要做的是将文件移动到完成的文件目录。
更新: 只是为了更清楚,过滤后的 successful/good 行将需要聚合在一个文件中以写入完成的目录和 corrupted/filtered 行将被写入另一行。
说到上面,我不清楚以下几点:
- 我需要 messages/lines 之间的某种相关性吗? 手动提供或 Spring 集成会为我做吗?
- 如果过滤掉了一些行,那么正确的是什么 与聚合器一起使用的策略?
- 如何使用文件标记来识别文件何时 完成移动到完成目录?
场景简单如下:
FileSplitter -> line Filter -> Outbound Gateway (webservices) -> Aggregator
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 中有一些关于此事的信息。