Apache Camel链式连接路由

4
我需要实现以下场景:
1. 远程连接到FTP服务器。 2. 将一个大文件(大小超过3GB)复制到本地文件夹。 3. 流式传输本地文件到Camel处理器,每次批处理100行。 4. 将行的批处理集写入Kafka主题。
现在我已经解决了第一部分。 我能够将文件读入本地目录。 问题是,如何启动第二个路由(将本地文件流式传输到Kafka)? 是否有一种方法可以将所有这些任务链接到同一个路由中,还是应该有多个路由?
如果需要两个路由,则在第一个路由完成后启动第二个路由的最佳方式是什么?
感谢您的任何帮助。 另外,这是已经工作的FTP部分。
public void configure() throws Exception {
    from(fullyBuiltFtpPath)
            .routeId("FTP ENDPOINT CONSUMER" + UUID.randomUUID().toString())
            .process(new FtpToLocalFileProcessor())
            .to("file:c:\\temp")
            .log(LoggingLevel.INFO, "FILENAME: ${header.CamelFileName}").end();
}

你可以使用file component来监控你保存100行批处理文件的目录。但是为什么不直接将批次发送到Kafka呢?你需要对文件做其他操作吗? - Ralf
那是另一个选择,但我不知道如何直接从FTP路径批处理文件。是否有组件可以让我在FTP路由将文件复制到本地临时目录后进行流式传输? - h0mer
2个回答

0

在Linux环境中,在文件夹中生成文件并同时使用它并不是错误的,但这取决于环境。然而,Camel提供了一个有用的机制,即“doneFileName”,可以在消费者和生产者中指定。

更多详细信息请参见此处:http://camel.apache.org/file2.html

您可以在“从其他人直接放置文件的文件夹中消费文件”部分找到更多详细信息。


0

最终我将路由拆分为两个不同的路由:

1.) 从FTP服务器检索文件并将其存储在本地临时目录中 2.) 启动一个文件路由来监听本地临时目录并消费文件。

这并不是理想的解决方案,但现在可以使用。 感谢您的帮助。


我们如何处理路由2处理时间很长的情况?我不希望路由1填满文件系统。 - dustmachine
在我的情况下,我对路由1(从FTP检索)进行了文件锁定,然后当锁定被释放时,路由2将拾取该文件并继续处理。 - h0mer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接