【问题标题】:Apache camel: SFTP: files downloaded multiple timesApache camel:SFTP:文件下载多次
【发布时间】:2013-03-08 23:05:47
【问题描述】:

我已经定义了以下骆驼路线:

    RouteBuilder rb = new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("sftp://myhost//path/to/files/")
            .to("log:loggingCategory?level=INFO")
            .to("file:///tmp/");
        }
    };

当我使用这条路线启动上下文时,骆驼确实会连接并下载文件。我的问题是骆驼重复下载相同的文件,直到上下文被关闭。为什么 FTP2 组件会这样做,我该如何阻止它?

我已经通过 maven 包含了 2.10.4 版的 camel-core 和 camel-ftp。

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    Indempotent Consumer 可以解决问题。 the FTP2 component 的文档将 the File2 component 称为“因为那里的所有选项也适用于该组件”。有一个参数“indempotent=true”可以激活 LRUCache 的使用:

    使用幂等消费者 EIP 模式让 Camel 跳过的选项 已经处理的文件。默认使用基于内存的 LRUCache 包含 1000 个条目。如果 noop=true 那么幂等将被启用 以及避免一遍又一遍地使用相同的文件。

    我的完整源定义现在如下所示:

    from("sftp://myhost//path/to/files/?username=user&password=secret&idempotent=true")
    

    【讨论】:

    • 你是对的,使用幂等选项可以解决你的问题。请记住设置基于文件的 idempotentrepository 选项或自定义选项,否则在重新启动或文件数量超过 1000 个时,您最终会遇到同样的问题。
    【解决方案2】:

    来自camel ftp2 文档:

    默认情况下,FTP 使用者将保持已使用的文件保持不变 远程 FTP 服务器。如果需要,您必须明确配置它 它删除文件或将它们移动到另一个位置。例如 您可以使用 delete=true 删除文件,或使用 move=.done 移动 文件到一个隐藏的完成子目录中。

    要删除文件,请将路径更改为

    from("sftp://myhost//path/to/files?delete=true")
    

    确保连接的用户具有所需的权限。

    【讨论】:

    • 感谢您的评论,但我不想删除源文件。我的意图是骆驼确实从 sftp 源复制所有文件然后停止,所以我想在 Unix 上通过 SFTP 实现像“cp -r”这样的递归复制。我现在找到了解决方案,我会在这里发布答案。
    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2022-12-24
    • 1970-01-01
    • 2023-04-04
    • 2019-01-30
    • 2011-03-31
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多