1

我一直在努力寻找这方面的信息,但由于 Spring Integration 框架的不成熟,我运气不佳。

这是我想要的工作流程:

  1. 新文件放置在“传入”目录中

  2. 使用 file:inbound-channel-adapter 获取文件

  3. 文件内容一次 N 行流式传输到“Stage 1”通道,该通道将行解析为中间(共享)表示。

  4. 这条解析后的线路被路由到多个“Stage 2”通道。

  5. 每个“第 2 阶段”通道对 N 条可用线路进行自己的处理,以将它们转换为最终表示。该通道必须有一个队列,以确保在一个通道的处理速度明显慢于其他通道的情况下,不会使第 2 阶段通道不堪重负。

  6. N 行的最终表示被写入文件。将有与步骤 4 中的路由目标一样多的输出文件。

**上面的'N'代表一次读取的任何合理数量的行,从[1,我可以合理地放入内存中],但保证始终小于完整文件中的行数。*

如何在 Spring Integration 中完成流式传输(步骤 3、4、5) ?不流式传输文件相当容易,但我的文件足够大,我无法将整个文件读入内存。

作为旁注,我有一个没有 Spring Integration 的工作流的工作实现,但是由于我们在项目的其他地方使用 Spring Integration,我想在这里尝试一下它的执行方式以及结果如何代码比较长度和清晰度。

4

1 回答 1

1

这是一个非常有趣的用例,很抱歉我错过了这么长时间。绝对值得为此创建一个问题。目前,我们在 Spring Integration 中支持获取文件并发送对它们的引用。对于将文件转换为 byte[] 或 String 也有一些基本的支持。

答案是现在您将在自定义 Java 代码中执行第 2 步,将块发送到第 2 阶段通道。我建议不要将流的引用作为消息有效负载发送。

于 2010-05-08T10:43:19.847 回答