Apache Camel从SFTP中不完整地下载了一些文件

时间:2018-01-16 21:11:32

标签: java spring apache-camel camel-ftp

我一直在努力解决为什么有些文件没有正确下载的问题。 即使在本地测试并重新启动我的应用程序,似乎某些文件也无法完全下载。 为了使事情变得更加困难,它并不总是一致的。

的信息:

  • Apache Camel版本:2.20.0
  • 使用camel-spring-boot-starter
  • 集成到Spring-Boot应用程序中
  • 文件大约是190M
  • 使用独立的Jsch和Linux sftp客户端
  • 下载文件
  • 堆大小设置为1G,内存使用量甚至不接近最大值
  • Camel没有检测到下载有什么问题,即使写入的字节数比根据camel标题(camel标题具有正确的文件长度)文件的长度少几十兆字节
  • 我发现org.apache.camel日志记录设置为TRACE的问题没有在日志中看到任何奇怪的内容。
  • Idemoptent repo更新,就像文件处理正确一样
  • 我在Linux和Windows上看到了同样的问题

有关问题的建议或如何排除故障的建议会很棒!

路由配置(由于值来自spring-boot配置,因此人工创建了一点):

100

UPDATE1

添加public class FileRouteBuilder extends RouteBuilder { // Cut @Override public void configure() throws Exception { errorHandler(deadLetterChannel("seda:"+ROUTE_ID_ERROR_EMAIL)); from("sftp://username@hostname/OUT?noop=true&streamDownload=true&password=password&include=Data_file.*csv&idempotentRepository=#keyRepo&greedy=true&delay=5m&maxMessagesPerPoll=10&readLock=changed") .id(routeConfig.getRouteId()) .routeDescription(routeConfig.getRouteId()) .setHeader(HEADER_FILE_SOURCE, constant(routeConfig.getRouteId())) .to("log:feeds." + routeConfig.getRouteId() + "?level=INFO&showAll=true") // Exclude all files oder than the specified number of hours .filter(new FileModifiedSincePredicate(24)) .to(file:rootDir/DATA) .to("seda:" + ROUTE_ID_ACTIVITY_EMAIL_NOTIFICATION) .end(); } } } 后的观察结果。

正确下载前两个文件,但服务器上的第三个和最后一个文件没有。

binary=true

teh Data_FIle_16.csv文件的正确文件大小为192867682字节,在193255587 Data_File_12.csv 191072548 Data_File_15.csv 139929360 Data_File_16.csv 标题中正确捕获。

更新2

删除上面的所有日志和seda电子邮件组件,然后重新运行。 第三个文件仍然没有写完。

添加相关的DEBUG级别日志输出,希望它能够揭示正在发生的事情或者排除某些事情。

据我所知,日志没有显示任何可疑内容,并且没有提示_16文件写得不完整。

在SFTP服务器上是否有任何可能发生的事情,任何人都知道值得与提供商核实?

CamelFileLength

1 个答案:

答案 0 :(得分:0)

您下载后记录消息,并使用streamDownload = true。请参阅此常见问题解答:http://camel.apache.org/why-is-my-message-body-empty.html以及如何在需要时使用流缓存。

因为消息是基于流的,所以要么不记录消息体(您可以记录标题等),然后将其路由到文件端点,以便将其直接保存为文件。