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

WSO2中SFTP文件写入后获取文件大小及重试实现方案

使用VFS写入SFTP后获取文件大小并实现重试逻辑

核心问题解答

使用VFS完成SFTP文件写入后,可以获取目标文件的大小属性,不过默认不会自动将该属性注入到消息上下文里,需要通过额外配置或逻辑读取文件元数据,以此判断写入是否成功并触发重试。

具体实现方案

1. 写入后读取文件大小

在文件写入的<call>节点之后,添加读取目标文件元数据的逻辑,通过VFS组件获取文件大小。以Apache Camel为例,VFS组件会在读取文件时自动填充CamelFileLength消息头,该字段即为文件的字节大小。

2. 基于文件大小触发重试

通过retryWhile机制判断文件大小是否有效:若file-size属性为空或等于0,则重复执行写入和校验逻辑,直到条件不满足或达到重试上限。

修改后的示例配置

<route>
    <!-- 原SFTP写入逻辑 -->
    <call>
        <endpoint>
            <address uri="vfs:sftp://{username}:{password}@{host/path}">
                <timeout>
                    <duration>60000</duration>
                </timeout>
                <suspendOnFailure>
                    <initialDuration>1000</initialDuration>
                    <progressionFactor>2</progressionFactor>
                    <maximumDuration>60000</maximumDuration>
                </suspendOnFailure>
                <markForSuspension>
                   <retriesBeforeSuspension>3</retriesBeforeSuspension>
                    <retryDelay>1</retryDelay>
                </markForSuspension>
            </address>
        </endpoint>
    </call>
    
    <!-- 读取已写入文件的大小 -->
    <setHeader headerName="CamelFileName">
        <simple>${header.CamelFileName}</simple> <!-- 传递写入时的文件名 -->
    </setHeader>
    <to uri="vfs:sftp://{username}:{password}@{host/path}?operation=get&amp;fileName=${header.CamelFileName}&amp;readLock=none"/>
    <setHeader headerName="file-size">
        <simple>${in.header.CamelFileLength}</simple>
    </setHeader>
    
    <!-- 文件大小无效则重试 -->
    <retryWhile>
        <simple>${header.file-size} == null || ${header.file-size} == 0</simple>
    </retryWhile>
</route>

关键说明

  • CamelFileLength是VFS组件内置的消息头,读取文件时自动生成,直接对应文件字节数。
  • retryWhile会循环执行写入+校验逻辑,直到文件大小有效或触发重试上限。
  • 需确保CamelFileName消息头正确传递,否则无法精准定位到刚写入的目标文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:02