检查文件时,Apache Camel FTP挂起

时间:2018-08-23 11:14:23

标签: ftp apache-camel

我在Windows 2012上运行了骆驼2.18.5路由:

From[ftp://server1.com:21/test/?username=admin
password=XXXXXX
passiveMode=true
delete=true
binary=true
autoCreate=false
reconnectDelay=240000
throwExceptionOnConnectFailed=true
readLock=none
localWorkDirectory=c:\ftpworkdir
scheduler=spring
scheduler.cron=0+0/10+*+*+*+MON-FRI
maximumReconnectAttempts=0
disconnect=true
soTimeout=15000
stepwise=false
doneFileName=${file:name}.SEM
include=(?i).*\.XML
To[file://c:/todir?doneFileName=${file:name}.SEM]]

它在大多数情况下都可以正常工作,可以检测和下载文件并断开连接,但有时会挂起-可能是由于某些网络或服务器事件造成的。当它挂起并关闭程序时,它会记录日志:

org.apache.camel.component.file.remote.FtpConsumer : Error occurred while disconnecting from ftp://admin@server1.com:21 due: File operation failed:  Connection reset. Code: 221. This exception will be ignored.

因此,它似乎在soTimeout或默认数据timeout=30000之后保持连接很长时间,并且仅在被要求关闭路由后才断开连接。

disconnectOnBatchComplete参数似乎无关紧要,但我仍将其包含在运行测试中。

我无法控制FTP服务器。

我正在寻找有关尝试的任何建议-例如设置或调试方法或要求服务器管理员使用的特定内容。

1 个答案:

答案 0 :(得分:0)

我建议您捕获错误并警告运营团队。面对现实,您不能指望将服务器固定在无法控制的范围内,但是可以肯定的是,操作团队可以在问题发生时就意识到问题。这可能有助于他们解决问题,并且肯定会满足用户的期望。

类似这样的东西(不是真正的代码只是显示概念):

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <onException>
    <exception>java.io.IOException</exception> <!-- whatever exception you want to catch-->
    <log message="exception occured: ${exception}" loggingLevel="ERROR" />
    <to uri="smtp://sendmailtooperators/>
  </onException>
  <from uri="ftp://server1.com:21/test/?username=admin"/>
  <to uri="file://c:/todir?doneFileName=${file:name}.SEM]]"/>
</camelContext>

您甚至可以定义一个错误处理程序策略,以使其在遇到3次错误时重试(使用重新交付策略)。

错误将会发生,我将采用成熟的集成路线来处理最常见的错误并报告边缘情况。