2017-10-10 160 views
1

我有一個全局定義的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://stackoverflow.com/questions/18211918/camel-ftp-only-run-once –

+0

不,我能夠停止路線。我無法再作爲一個新的開始。 – streetturtle

回答

1

我認爲一般來說,這是Apache Camel的濫用。路線並不意味着在應用程序中反覆啓動或停止。 Camel中的路由通常用於定義,然後在應用程序啓動時啓動,然後不停止,直到應用程序停止。

如果您想要使用基於file consumer的路由(文件,FTP,SFTP等)按需重新下載文件,我認爲正確的方法是從.camel目錄中移動文件(其中下載的文件是默認放置)回到由文件消耗監視的目錄。如果需要,你可以很容易地編程。

這應該會導致駱駝重新下載文件。完成後,駱駝將把它們放回.camel目錄中。如果需要,您也可以使用與.camel不同的目錄。使用移動文件組件標誌(.camel是默認值)。