2016-04-14 258 views
2

下面是这种情况,我想实现:Apache的骆驼链接路由一起

远程FTP服务器 复制大文件(3gig +尺寸)到本地文件夹 流本地文件到骆驼处理器,一次批量处理文件100行。 将批处理的一组线条写入Kafka主题。

现在我已经弄清了第一部分。我可以将文件读入本地目录。问题是,我该如何踢第二条路线(将本地文件流式传输到Kafka)?有没有办法访问到所有这些任务在同一个路线,或者我应该有多种途径:

1的FTP - >本地文件,然后1对本地文件 - > 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(); 
} 
+0

您可以使用[文件组件](http://camel.apache.org/file2.html)来监视文件中保存100行批处理的目录。但是,你为什么不把批次直接送到卡夫卡?你需要对文件做其他事吗? – Ralf

+0

这是另一种选择,但我不知道如何直接从FTP路由批处理文件。在FTP路径将文件复制到localTempDirectory之后,是否有组件允许我将其流入? – h0mer

回答

0

我最终的路线分成两个截然不同的路线:

1)从FTP服务器检索文件,并将其存储在本地Temp目录 2)启动了一个文件路径,听取当地温度目录并使用该文件。

这并不理想,但它现在可行。谢谢您的帮助。

+0

我们如何处理路线2需要很长时间处理的情况?我不想让路由1填满文件系统。 – dustmachine

+0

在我的情况下,我在路由1上做了一个文件锁定(从FTP检索),然后当锁定被释放时,路由2将拾取文件并继续处理。 – h0mer

0

生成文件夹中的文件并在Linux环境中同时使用它并不正确,但这取决于环境。然而,骆驼提供了一个有用的机制,即可以在消费者和生产者中指定的“doneFileName”。 更多详细信息,请参见:http://camel.apache.org/file2.html

有关详细信息,请参见“从其他人直接放置文件的文件夹中获取文件”部分。