当前位置: 首页 > 知识库问答 >
问题:

骆驼:文件操作失败:连接关闭,没有指示。代号:421

柴耀
2023-03-14

我正在使用Camel2.15.2和部署到Tomcat容器中的Apache Commons Net3.3 on Java8。

问题是在处理了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。

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

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

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

有什么想法为什么连接可能在所有文件被处理之前关闭吗?

共有1个答案

伊富
2023-03-14

您需要向FTP/FTPS url添加以下参数

Disconnect=true

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

 类似资料:
  • 问题内容: 我一直在对我们的一个宠物项目进行代码审查(通常使用诸如FindBugs之类的工具),并且FindBugs将以下代码标记为错误的(伪代码): 错误是此代码可能不会释放资源。我发现ResultSet和Statement没有关闭,所以我最终将它们关闭: 但是我在许多项目(来自许多公司)中遇到了上述模式,没有人关闭ResultSets或Statements。 关闭连接时,是否关闭了Result

  • =================================================================================================================================================================堆栈跟踪: 位于system.net.httpWebRequest.Endge

  • 我刚刚开始研究apache camel(使用蓝图路线),我已经被卡住了。 我需要处理一组不同格式的csv文件。我有5个文件,foo_X_X指定csv文件的类型,文件有日期戳。这些文件可能很大,所以一旦写入所有文件,就会写入一个“完成”文件。完成的文件名为foo_trigger_20160110.csv. 我在文件中看到了doneFileName选项,但它只支持静态名称(我在文件名中有一个日期),或

  • 问题可能也与我对这个概念的理解有关。 正在调用代理bean,它是。代理bean接口是使用类实现的。所以我期待返回的通过传递,然后在控制台上流式传输。 Application Context 会计界面 会计Util 动作课 但是我有例外: 还有一个问题,我可以为单个提供多个 我希望使用不同的方法调用不同的,但只是单个接口的一部分。

  • 要求是为httpendpoint设置connectionTimeout。我使用的是http4组件和http协议。httpClient。connectTimeout适用于https,不适用于http。 并尝试设置连接TimeToLive=1参数也在http 4组件bean和它是不工作。 我发现socketTimeout参数正在工作。但要求是设置connectionTimeout。 请建议是否有任何方