Верблюд: Ошибка операции с файлом: Соединение закрыто без индикации. Код: 421

Я использую Camel 2.15.2 с Apache Commons Net 3.3 на Java 8, развернутой в контейнере Tomcat.

Проблема в том, что последовательно после обработки чуть более 200 файлов (> 4000 файлов в каталоге) маршрут останавливается, FTP-клиент отключается, и выходит следующее сообщение:

[ogs.sharp-stream.com:21/root/] FtpConsumer                    WARN  Error processing file RemoteFile[route/to/file] due to File operation failed:  Connection closed without indication.. Code: 421. Caused by: [org.apache.camel.component.file.GenericFileOperationFailedException - File operation failed:  Connection closed without indication.. Code: 421] 
org.apache.camel.component.file.GenericFileOperationFailedException: File operation failed:  Connection closed without indication.. Code: 421 
        at org.apache.camel.component.file.remote.FtpOperations.getCurrentDirectory(FtpOperations.java:713) 
        at org.apache.camel.component.file.remote.FtpOperations.retrieveFileToFileInLocalWorkDirectory(FtpOperations.java:440) 
        at org.apache.camel.component.file.remote.FtpOperations.retrieveFile(FtpOperations.java:310) 
        at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:384) 
        at org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:137) 
        at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:211) 
        at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:175) 
        at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187) 
        at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114) 
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
        at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication. 
        at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:317) 
        at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294) 
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:483) 
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:608) 
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:582) 
        at org.apache.commons.net.ftp.FTP.pwd(FTP.java:1454) 
        at org.apache.commons.net.ftp.FTPClient.printWorkingDirectory(FTPClient.java:2658) 
        at org.apache.camel.component.file.remote.FtpOperations.getCurrentDirectory(FtpOperations.java:709) 
        ... 15 more 

Этот URI, используемый в начале связанного маршрута.

Как видно из URI, я также использую FileIdempotentRepository. Это определяется так

            <property name="fileStore" value="target/fileidempotent/.filestore1.dat" />

            <property name="maxFileStoreSize" value="512000" />

            <property name="cacheSize" value="250" />
    </bean>

Any ideas why the connection might be closing before all files are processed?


person Eric Ekong    schedule 13.08.2015    source источник


Ответы (2)


Вам необходимо добавить следующий параметр к URL-адресу ftp/ftps

отключить = истина

Это приведет к отключению от вашего удаленного хоста после передачи файлов и попытке нового подключения при каждом повторном запуске маршрута. (вместо использования устаревшего, который мог быть закрыт удаленным хостом/брандмауэром)

person AnkitPant    schedule 29.12.2015
comment
Просто отметим, что у меня возникла аналогичная проблема с disconnect=true в моем URL-адресе Camel, поэтому кажется, что это случай проскальзывания, в котором маршруты терпят неудачу без какой-либо возможности обработки ошибок? В отличие от других случаев, таких как неверные учетные данные, CamelFailureEndpoint не устанавливается, и я не получаю никаких указаний на ошибку, кроме журнала WARN. - person DoNuT; 04.04.2018
comment
Может быть, глупый вопрос, но как это выглядит в URL-адресе ftp? В моем случае, пытаясь сделать hadoop fs -get ftp://usernamer:[email protected]/path/to/some/file?disconnect=true /some/local/path и получая No such file or directory, он пытается получить файл с именем path/to/some/file?disconnect=true. - person lampShadesDrifter; 26.12.2019
comment
stackoverflow.com/questions/27930920/apache-camel-ftp-error предлагает разбить на два маршрута, чтобы принудительно отключить/повторно подключиться - person user77115; 03.06.2020

Я предполагаю, что ваше соединение закрыто, например. ваша противопожарная стена. Попробуйте установить параметр maxMessagesPerPoll, например. 150.

person lahu89    schedule 13.08.2015