Camel:文件操作失败:连接关闭但没有指示..代码:421

时间:2015-08-13 13:39:03

标签: apache-camel apache-commons-net camel-ftp

我在部署到Tomcat容器中的Java 8上使用Camel 2.15.2和Apache Commons Net 3.3。

问题是,在处理了超过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 

This is the URI在相关路线的开头使用。

从URI中可以看出,我还使用了FileIdempotentRepository。它的定义如下

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

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

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

在处理所有文件之前,为什么连接可能会关闭?

2 个答案:

答案 0 :(得分:4)

您需要将以下参数添加到ftp / ftps url

  

断开=真

这将导致在传输文件后断开与远程主机的连接,并在重新触发路由时尝试重新连接。 (而不是使用可能已被远程主机/防火墙关闭的陈旧的那个)

答案 1 :(得分:0)

我认为你的连接是关闭的,例如你的防火墙。 尝试将参数maxMessagesPerPoll设置为例如150。