重用Camel FTP路由

时间:2017-10-10 15:04:54

标签: apache-camel camel-ftp

我有一个全局定义的FTP Camel路由。它是从另一条路线开始的:

exchange.getContext().startRoute("downloadRoute");

并在另一个帖子中停止,如here所述:

.process(new Processor() {
    Thread stop;
    @Override
    public void process(final Exchange exchange) throws Exception {
        stop = new Thread() {
            @Override
            public void run() {
                try {
                    log.info("Stopping route");
                    exchange.getContext().stopRoute("downloadRoute");
                } catch (Exception e) {
                } finally {
                    latch.countDown();
                }
            }
        };
        stop.start();
    }
})

工作正常。现在我想再次开始这条路线。假设我在文件夹中添加了新文件,并希望再次下载它们,或者重新下载下载的文件 因此,我使用相同的命令再次启动此路由,但它不会下载文件 - 它根本无法看到它们,因为它们标记为在路径中的某处下载。然而,如果我从驼峰上下文中删除此路由然后再次添加它并开始 - 它可以工作 - 它再次下载文件。

所以问题是如何重用(启动 - 停止 - 启动)现有路线以便它以新路线开始?

1 个答案:

答案 0 :(得分:1)

我认为一般来说,这是滥用Apache Camel。路径并不意味着在应用程序中反复启动或停止。 Camel中的路由通常是定义的,然后在应用程序启动时启动,然后在应用程序停止之前不会停止。

如果您想使用基于file consumer的路由(文件,FTP,SFTP等)按需重新下载文件,我认为正确的方法是从.camel目录移动文件(其中)下载的文件默认放置)返回到文件使用监视的目录。如果需要,您可以非常轻松地以编程方式执行此操作。

这应该会导致Camel重新下载文件。完成后,Camel会将它们放回.camel目录中。如果需要,您还可以使用移动文件组件标志(.camel是默认值)使用与.camel不同的目录。