我正在运行我的camel ftp,从远程linux服务器目录下载大约10000个文件到本地机器目录。一旦完成下载大约2000个文件,我就会收到堆内存不足的错误。根据其他论坛帖子,建议使用maxMessagesPerPoll。但如果我将其设置为1000,它只下载1000个文件并停止。我的代码非常简单,取自camel ftp示例
from("sftp://xxxxx:22//tmp/serverfolder/?stepwise=false&include=ABC*.txt}}&username=XXXX&password=XXXXX&maximumReconnectAttempts=0&delay=5s&maxMessagesPerPoll=1000")
.to(/tmp/localfolder/);
答案 0 :(得分:0)
我相信你正在与论坛上的人交谈。然而,看起来他们的一条消息被错过/遗失了。 Camel FTP是一个“轮询端点”,这意味着它将不断地在一个循环上调用端点。这根本不难配置,它可以让你拉几个文件,等一下然后拉更多。理想情况下,这将允许您跟上放入目录的文件,因此您通常不会获得10,000批文件。你可以每隔几秒钟移动几百个。
文档:
http://camel.apache.org/polling-consumer.html
http://camel.apache.org/ftp.html
FTP DOCS的重要提示:请参阅File2,因为此组件的所有选项也适用。
http://camel.apache.org/file2.html
file2文档中的信息
Property Default Description
delay 500 Milliseconds before the next poll of the file/directory.
这意味着您可以每隔几秒或几分钟拿起一些文件,而不是一次性移动所有10k文件。另外请记住,使用此选项时,除非您偶尔启动骆驼路线,否则通常不会有10k的累积。
重要说明2: FTP Consumer不支持并发
请记住这一点。您将无法仅添加一堆线程来提高性能,因此如果您想处理大量文件,保持组件不断运行非常重要。理想情况下,最好不断消耗它们,而不是每天一次批量装载。