You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 SFTP文件未处理直接移入Out目录问题排查

WSO2 VFS代理文件直接移动未处理问题排查

问题核心

从SFTP的in目录拾取约200个文件时,WSO2直接将部分文件移至out目录,未执行inSequence中的日志打印逻辑;即便配置逐个处理、文件间隔,K8s单/双Pod环境下问题依旧,仅SMB目录出现该问题,本地目录正常。

可能原因及排查方向

  • 文件锁定失效:SMB协议下VFS的文件锁定逻辑和SFTP/本地系统存在差异,多Pod或多线程扫描时,部分文件未被正确锁定就被标记为已处理,直接触发移动操作。
    排查:开启VFS调试日志,查看文件扫描阶段的锁定记录,确认是否存在未锁定就被处理的文件。

  • 文件状态误判:SMB目录中文件的修改/访问时间属性返回异常,VFS误判文件已稳定完成写入,跳过处理流程。
    排查:添加transport.vfs.FileAge参数,设置文件需存在超过30秒才被拾取;同时检查SMB服务器的文件属性返回是否正常。

  • 传输协议配置缺失:代理的transports仅设置了http https,未包含vfs,导致VFS传输加载不完整,部分文件处理流程异常。
    修复:将transports改为vfs http https。

  • SMB连接异常:K8s环境下SMB连接间歇性中断,读取文件时触发IO异常,但未走ActionAfterFailure,反而执行了ActionAfterProcess。
    排查:查看WSO2错误日志,确认是否有SMB相关IO异常;修正MoveAfterFailure路径(当前多了一个斜杠,应改为sftp://folder/error),同时增加transport.vfs.MaxRetryCount值。

  • 线程池溢出:200个文件批量处理时,VFS处理线程池队列溢出,部分文件直接被移动未进入序列处理。
    排查:添加transport.vfs.ThreadPoolSize参数,限制并发线程数(比如设为5)。

配置修正示例

<proxy name="file_read" startOnLoad="true" transports="vfs http https" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <property expression="get-property('transport', 'FILE_NAME')" name="INPUT_FILE_NAME" scope="default" type="STRING"/>
            <log>
                <property expression="$ctx:INPUT_FILE_NAME" name="Input-filename"/>
            </log>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
    <parameter name="transport.vfs.Streaming">true</parameter>
    <parameter name="transport.PollInterval">60</parameter>
    <parameter name="transport.vfs.MaxRetryCount">3</parameter>
    <parameter name="transport.vfs.FileURI">sftp://folder/in?sftpPathFromRoot=true&amp;transport.vfs.AvoidPermissionCheck=true</parameter>
    <parameter name="transport.vfs.ContentType">text/plain</parameter>
    <parameter name="transport.vfs.FileProcessInterval">30000</parameter>
    <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
    <parameter name="transport.vfs.MoveAfterFailure">sftp://folder/error?sftpPathFromRoot=true&amp;transport.vfs.AvoidPermissionCheck=true</parameter>
    <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
    <parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
    <parameter name="transport.vfs.MoveTimestampFormat">yyyy-MM-dd'T'HH:mm:ss_</parameter>
    <parameter name="transport.vfs.MoveAfterProcess">sftp://folder/out?sftpPathFromRoot=true&amp;transport.vfs.AvoidPermissionCheck=true</parameter>
    <parameter name="transport.vfs.FileAge">30000</parameter>
    <parameter name="transport.vfs.ThreadPoolSize">5</parameter>
</proxy>

内容的提问来源于stack exchange,提问作者ahinsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 08:30:11