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

Apache Camel FTP在检查文件时挂起

岳正阳
2023-03-14
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或默认的datatimeout=30000之后很长时间仍保持连接,并且只有在被要求关闭路由之后才断开连接。

DisconnectonBatchComplete参数似乎并不相关,但我已经将其包含在一个正在运行的测试中。

我正在寻找任何建议的事情尝试-像设置或调试方法或特定的事情问服务器管理员。

共有1个答案

巩俊远
2023-03-14

我建议你捕获错误并通知行动小组。让我们面对这样一个事实,您不能期望修复一个超出您控制的服务器,但您肯定可以确保操作团队在问题发生时意识到它。这可能会帮助他们解决问题,当然也会管理用户的期望。

类似这样的事情(不是真实的代码,只是显示概念):

<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>

您甚至可以定义一个errorhandler策略,以便在它三次命中错误时重试(使用redelivery策略)。

 类似资料:
  • 我正在创建一个ApacheFTPS客户端(因为远程服务器不允许普通FTP)。我可以毫无问题地连接和删除文件,但在使用retrieveFile()或retrieveFileStream()时,它会挂起。 出于某种原因,非常小的文件确实会传输(高达5792字节),但其他任何东西都会给出以下PrintExpldListener输出: 运行: 220------欢迎使用纯FTPd[privsep][TLS

  • 问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),

  • 我有一份流媒体工作: 读Kafka-- 启动时,一切都很好。问题是,过了一段时间,磁盘空间被我认为是链接检查点的东西填满了。 我的问题是,在链接作业运行时是否应该清除/删除检查点?找不到此上的任何资源。 我使用的是写入/tmp的文件系统后端(无hdfs设置)

  • 问题内容: 如何检查 文件 的存在? 在模块的文档中,有方法的说明。但是,据我了解,它只检查目录的存在。而且我需要检查 文件 ! 如何才能做到这一点? 问题答案: 为什么不尝试打开文件? 无论如何,经过一分钟的搜索,请尝试以下操作: 对于Node.js v0.12.x及更高版本 双方并已弃用 *编辑: 已更改: 至: 林特抱怨双重等于不是三次等于。 使用fs.stat:

  • 问题内容: 给定文件或目录的路径,如何确定该文件的安装点?例如,如果作为文件系统挂载,则给定文件名,我想知道它存储在根目录下。 这将是C ++语言,我希望避免通过调用外部命令。该代码应该健壮-不一定要防止故意的篡改,但绝对要面对嵌套的安装点,符号链接等。 我还没有找到一个简单的系统调用来执行此操作。看来我得自己写支票。这是我计划的粗略概述。 在shell命令中规范化文件名。 怎么样? 与&合作阅读

  • 我正在编写一个函数,该函数正在读取已处理的文件(文件名)。在已处理文件(open_file1)中,所有行都是元组。我的问题在于:为了使用该程序,我必须始终以命令输入作为输入文件名。如果用户在没有输入输入文件名的情况下输入团队标识符,即第三条elif语句,则程序崩溃。所以,我所做的是,在第三个elif语句中,我用一个os语句检查了输入文件的存在性。如果输入文件不存在,我写了一个else语句来请求另一