gpt4 book ai didi

java - Apache Camel 从 SFTP 下载一些文件不完整

转载 作者:行者123 更新时间:2023-12-05 07:37:56 29 4
gpt4 key购买 nike

我一直在努力弄清楚为什么有些文件没有正确下载。似乎某些文件不会完全下载,即使在本地测试并重新启动我的应用程序时也是如此。使事情变得更加困难的是,它并不总是一致的。

信息:

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

任何关于问题可能是什么的建议或如何解决问题的建议都很棒!

路由配置(有点人为创建,因为值来自 spring-boot 配置):

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();
}
}
}

更新1

添加 binary=true 后的观察。

前两个文件已正确下载,但服务器上的第三个也是最后一个文件未正确下载。

193255587 Data_File_12.csv
191072548 Data_File_15.csv
139929360 Data_File_16.csv

Data_FIle_16.csv 文件的正确文件大小是 192867682 字节,它在 CamelFileLength header 中正确捕获。

更新 2

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

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

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

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

o.a.c.c.file.remote.SftpConsumer         : Took 0.194 seconds to poll: OUT
o.a.c.c.file.remote.SftpConsumer : Total 3 files to consume
o.a.c.c.file.remote.SftpConsumer : About to process file: RemoteFile[Data_File_12.csv] using exchange: Exchange[]
o.apache.camel.processor.SendProcessor : >>>> file://target/file-dest/MISA Exchange[ID-LON-2016-1516204084378-0-1]
o.a.camel.component.file.FileOperations : Using InputStream to write file: target\file-dest\MISA\Data_File_12.csv
o.a.camel.converter.jaxp.XmlConverter : Created TransformerFactory: com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl@d9dfe93
o.a.c.c.file.GenericFileProducer : Wrote [target\file-dest\MISA\Data_File_12.csv] to [file://target/file-dest/MISA]
o.a.c.c.file.GenericFileOnCompletion : Done processing file: RemoteFile[Data_File_12.csv] using exchange: Exchange[ID-LON-2016-1516204084378-0-1]
o.a.c.p.i.FileIdempotentRepository : Appending Data_File_12.csv-193255587 to idempotent filestore: target\file-dest\.file-key-repo\repo
o.a.c.c.file.remote.SftpConsumer : About to process file: RemoteFile[Data_File_15.csv] using exchange: Exchange[]
o.apache.camel.processor.SendProcessor : >>>> file://target/file-dest/MISA Exchange[ID-LON-2016-1516204084378-0-2]
o.a.camel.component.file.FileOperations : Using InputStream to write file: target\file-dest\MISA\Data_File_15.csv
o.a.c.c.file.GenericFileProducer : Wrote [target\file-dest\MISA\Data_File_15.csv] to [file://target/file-dest/MISA]
o.a.c.c.file.GenericFileOnCompletion : Done processing file: RemoteFile[Data_File_15.csv] using exchange: Exchange[ID-LON-2016-1516204084378-0-2]
o.a.c.p.i.FileIdempotentRepository : Appending Data_File_15.csv-191072548 to idempotent filestore: target\file-dest\.file-key-repo\repo
o.a.c.c.file.remote.SftpConsumer : About to process file: RemoteFile[Data_File_16.csv] using exchange: Exchange[]
o.apache.camel.processor.SendProcessor : >>>> file://target/file-dest/MISA Exchange[ID-LON-2016-1516204084378-0-3]
o.a.camel.component.file.FileOperations : Using InputStream to write file: target\file-dest\MISA\Data_File_16.csv
o.a.c.c.file.GenericFileProducer : Wrote [target\file-dest\MISA\Data_File_16.csv] to [file://target/file-dest/MISA]
o.a.c.c.file.GenericFileOnCompletion : Done processing file: RemoteFile[Data_File_16.csv] using exchange: Exchange[ID-LON-2016-1516204084378-0-3]
o.a.c.p.i.FileIdempotentRepository : Appending Data_File_16.csv-192867682 to idempotent filestore: target\file-dest\.file-key-repo\repo

最佳答案

啊你在下载消息后记录它,你使用streamDownload=true
看这个FAQ-why-is-my-message-body-empty以及如果这样做,您需要如何使用流缓存。

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

关于java - Apache Camel 从 SFTP 下载一些文件不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289896/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com