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

Apache Camel路由仅启动时生效一次的问题求助

问题修复思路

问题根源

你的SFTP组件默认开启了**幂等性(idempotent)**机制,哪怕设置了noop=true,它也会在第一次扫描后把所有文件标记为「已处理」,后续请求只会返回新增的文件(无新增则返回null)。内存中的已处理记录只有重启程序才会清空,所以第二次及之后调用都会统计到0。


修复方案

方案1:直接获取文件列表统计(推荐,简洁高效)

放弃循环poll的方式,直接调用SFTP的list操作获取目录下所有符合条件的文件列表,再统计数量。修改后的路由代码如下:

from("direct:fileCount")
    // 执行SFTP目录列表操作,获取所有匹配的文件
    .to("sftp://user@192.000.00.00/uploads?password=password123&include=.*&operation=list")
    .process(exchange -> {
        // 从消息体中取出文件列表并统计数量
        List<?> fileList = exchange.getIn().getBody(List.class);
        int count = fileList != null ? fileList.size() : 0;
        // 返回标准JSON格式结果
        exchange.getIn().setBody("{\"fileCount\": " + count + "}");
    });

这个方式每次请求都会重新扫描SFTP目录,完全不受已处理记录的影响,代码更简洁,性能也远优于循环poll的方式。

方案2:关闭SFTP幂等性(适配原有逻辑)

如果想保留你原来的循环统计逻辑,只需在SFTP的URL参数中添加idempotent=false,关闭幂等性跟踪,这样每次poll都会重新获取所有文件:

.pollEnrich("sftp://user@192.000.00.00/uploads?password=password123&noop=true&include=.*&idempotent=false",1000)

不过这种方式仅适合需要逐个处理文件的场景,单纯统计数量的话方案1是更优选择。


内容的提问来源于stack exchange,提问作者Ernesto Gómez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:20:09