我一直在努力寻找相关信息,但由于Spring Integration框架的不成熟,我没有太多运气。
这是我想要的工作流程:
新文件放在“传入”目录
使用文件:inbound-channel-adapter
文件内容一次N行流式传输到'Stage 1'通道,后者将该行解析为中间(共享)表示。
此解析后的行路由到多个“第2阶段”频道。
每个“第2阶段”通道在N条可用线上自行处理,将它们转换为最终表示。该通道必须有一个队列,以确保在一个通道处理速度明显慢于其他通道的情况下,没有第二级通道被淹没。
N行的最终表示形式写入文件。在步骤4中将有与路由目的地一样多的输出文件。
**'N'代表一次读取的任何合理行数,从[1,无论我能合理地放入内存],但保证总是小于完整行中的行数文件中。*
如何在Spring Integration中完成流式传输(步骤3,4,5)?没有流式传输文件很容易,但我的文件足够大,我无法将整个文件读入内存。
作为旁注,我有一个没有Spring Integration的工作流程的工作实现,但由于我们在项目的其他地方使用Spring Integration,我想在这里尝试一下,看看它是如何执行的结果代码如何比较长度和清晰度。
答案 0 :(得分:1)
这是一个非常有趣的用例,我很抱歉我错过了这么长时间。绝对值得创造一个问题。目前,我们在Spring Integration中支持获取文件并向其发送引用。将文件转换为byte []或String。还有一些基本的支持。
答案是,现在您将在自定义Java代码中执行第2步,将块发送到Stage 2通道。我建议不要将对流的引用作为消息有效负载发送。