我在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服务器。
我正在寻找有关尝试的任何建议-例如设置或调试方法或要求服务器管理员使用的特定内容。
答案 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次错误时重试(使用重新交付策略)。
错误将会发生,我将采用成熟的集成路线来处理最常见的错误并报告边缘情况。