Mule 4 SFTP删除操作执行成功仍报文件不存在错误咨询
SFTP删除报错路径不存在问题排查
报错信息
ERROR 2021-11-11 02:30:55,463 [[MuleRuntime].io.03: [sys-radial].external-radial-sftp-inbound-router--SFTP-Delete-subflow.BLOCKING @31470249] [event: 2ae4cdc0-4269-11ec-8be8-006f0000086f] org.mule.runtime.core.internal.exception.OnErrorContinueHandler: -------------------------------------------- Message : Path '/Inbox/BHBNA_BHBUS_ROMShpmntCntrDtls_20211014214251.xml' doesn't exist. Element : external-radial-sftp-inbound-router--SFTP-Delete-subflow/processors/0 @ sys-radial:shared-radial-connectivity/external-radial-sftp-inbound-router.xml:30 (Delete Remote File) Element XML : <sftp:delete doc:name="Delete Remote File" doc:id="927f78f9-feb6-462f-8a08-34c73c9b5548" config-ref="External_Radial_SFTP_Config" path="#['${external_sftp.radial.inbound_dir}' ++ vars.filename.^raw]"></sftp:delete> Error type : SFTP:ILLEGAL_PATH Payload Type : org.mule.runtime.core.internal.streaming.bytes.ManagedCursorStreamProvider -------------------------------------------------------------------------------- Root Exception stack trace: org.mule.runtime.api.exception.MuleRuntimeException: Path '/Inbox/BHBNA_BHBUS_ROMShpmntCntrDtls_20211014214251.xml' doesn't exist at org.mule.runtime.extension.api.exception.ModuleException.<init>(ModuleException.java:66)
核心原因
报错本质是执行删除指令时,目标文件已经不在SFTP服务端,你观察到的文件删除成功是首次操作的结果,报错来自后续重复的删除动作,常见触发场景如下:
- 归档逻辑自带删除能力:如果你的归档操作使用的是SFTP的
move指令,或者开启了归档自动清理源文件的配置,归档完成时源文件就已经被删除,后续主动执行的sftp:delete属于冗余步骤,自然找不到目标文件,这是最高发的原因。 - 同文件处理流程重复触发:Mule SFTP入站轮询如果没有配置合理的文件锁、幂等校验或者轮询间隔,同一个文件可能被两轮轮询同时捕获,分别触发完整处理流程,第一个流程删除文件成功后,第二个流程走到删除步骤就会报路径不存在。
- 路径拼接异常:当前删除路径的表达式为
#['${external_sftp.radial.inbound_dir}' ++ vars.filename.^raw],如果vars.filename存在不可见字符、前后多余空格,或者配置的目录参数大小写、分隔符和服务端实际路径不匹配(Linux环境的SFTP服务端大小写敏感),也会触发该错误。
解决方案
- 优先检查归档配置:如果归档逻辑已经会自动删除源文件,直接删除冗余的
sftp:delete节点即可解决问题。 - 排查重复触发问题:在删除步骤前添加日志,打印待删除路径和当前流程的执行ID,确认同一文件是否被多次执行。如果确认重复触发,调整SFTP入站配置,添加
fileAge属性设置合理的最小文件年龄避免未写完的文件被扫描,或者配置幂等过滤器,同一个文件名仅处理一次。 - 校验路径拼接逻辑:在删除节点前添加日志,输出拼接完成的完整路径,和SFTP服务端的实际路径比对,确认大小写、特殊字符、分隔符完全匹配。
- 增加容错逻辑:如果业务上允许「待删除文件不存在」的场景(该结果本身也符合删除的预期),可以给删除节点套上异常捕获逻辑,捕获
SFTP:ILLEGAL_PATH类型的错误后直接忽略即可。
内容的提问来源于stack exchange,提问作者S Agrawal
相关产品推荐
相关产品推荐

