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

Camel SFTP无法监听文件修改与删除事件求助

解决Camel SFTP仅触发文件创建事件的问题

一、监听文件修改事件

当前配置里的noop=true会让Camel把已处理文件存入幂等仓库,后续文件修改不会再触发。要捕获修改事件,需调整SFTP URI参数:

  • 移除noop=true,添加fileChanged=true开启文件修改检测,同时设置轮询间隔delay(比如5秒,按需调整):
String uri = "sftp://test.remoteadd.cc/opt/tomcat/webapps/file-watch?privateKeyFile=src/main/resources/keypair.pem&recursive=true&download=true&stepwise=false&useUserKnownHostsFile=false&username=ubuntu&binary=true&streamDownload=true&fileChanged=true&delay=5000";
  • 若要确保文件修改完成后再处理(避免处理未写完的文件),可配合readLock=changed和readLockCheckInterval:
String uri = "sftp://test.remoteadd.cc/opt/tomcat/webapps/file-watch?privateKeyFile=src/main/resources/keypair.pem&recursive=true&download=true&stepwise=false&useUserKnownHostsFile=false&username=ubuntu&binary=true&streamDownload=true&fileChanged=true&delay=5000&readLock=changed&readLockCheckInterval=2000";

二、监听文件删除事件

Camel SFTP原生不支持直接捕获删除事件,需自定义逻辑实现:

  1. 在RemoteFileWatcherEventProcessor中用ConcurrentHashMap维护已发现的远程文件路径缓存。
  2. 每次轮询时,通过Camel的GenericFileOperations API获取当前远程目录的完整文件列表。
  3. 对比当前列表与缓存,找出缓存存在但当前列表缺失的文件,判定为已删除,触发对应处理逻辑。
  4. 更新缓存为最新的文件列表。

三、调整后的路由示例

RouteBuilder rb = new RouteBuilder() {
    @Override
    public void configure() throws Exception {
        from(uri)
                .routeId(routeHandlerId)
                .setHeader("fileName").simple("${file:name}")
                .setHeader("fileEventType").simple("${file:changed} ? 'MODIFIED' : 'CREATED'")
                .bean(RemoteFileWatcherEventProcessor.class, "process(${body}, ${headers})")
                .to("file:/opt/test.cc/tomcat/webapps?fileName=${body.fileName}&autoCreate=true");
    }
};

在RemoteFileWatcherEventProcessor中集成上述删除事件检测逻辑,即可同时处理创建、修改、删除三种事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:01:25