重复使用骆驼FTP路由

问题描述:

我有一个全局定义的FTP骆驼路由。这是从另一个途径启动:重复使用骆驼FTP路由

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(); 
    } 
}) 

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

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

+0

请尝试这一个https://*.com/questions/18211918/camel-ftp-only-run-once –

+0

不,我能够停止路线。我无法再作为一个新的开始。 – streetturtle

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

如果您想要使用基于file consumer的路由(文件,FTP,SFTP等)按需重新下载文件,我认为正确的方法是从.camel目录中移动文件(其中下载的文件是默认放置)回到由文件消耗监视的目录。如果需要,你可以很容易地编程。

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