Я изо всех сил пытался понять, почему некоторые файлы загружаются неправильно. Похоже, что некоторые файлы просто не будут загружены полностью, даже при локальном тестировании и перезапуске моего приложения. Чтобы усложнить ситуацию, это не всегда последовательно.
Информация:
- Версия Apache Camel: 2.20.0
- Интегрирован в приложение Spring-Boot с помощью программы camel-spring-boot-starter.
- Файлы около 190M
- Файлы загружаются нормально, используя автономный клиент JSCH и Linux sftp
- Размер кучи установлен на 1 ГБ, а использование памяти даже не приближается к максимальному
- Camel не обнаруживает ничего плохого в загрузке, даже если количество записанных байтов на десятки мегабайт меньше длины файла в соответствии с верблюжьими заголовками (верблюжьи заголовки имеют правильную длину файла)
- Я заметил проблему с настройкой ведения журнала org.apache.camel на TRACE, но не увидел ничего странного в журналах.
- Идемоптентное репо обновляется, как если бы файл был обработан правильно
- Я вижу ту же проблему в 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
.
Обновление 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
binary=true
для включения двоичного режима - person Claus Ibsen   schedule 17.01.2018binary=true
, но столкнулся с той же проблемой. Еще несколько отформатированных деталей в обновлении 1 вопроса. - person Micke   schedule 17.01.2018