2013-03-08 91 views
1

我已經定義了以下駱駝路線:Apache的駱駝:SFTP:下載的文件多次

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包含了camel-core和camel-ftp的2.10.4版本。

回答

3

Indempotent Consumer有竅門。 the FTP2 component的文檔參考the File2 component「因爲所有選項也適用於此組件」。有一個參數「indempotent =真」激活的LRUCache的用法:

選項使用冪等消費EIP模式讓駱駝跳過 已處理的文件。默認情況下會使用基於內存的LRUCache ,其中包含1000個條目。如果noop = true,那麼idempotent將啓用 以避免重複使用相同的文件。

我的完整源定義現在看起來是這樣的:

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

你是對的,使用idempotent選項可以解決你的問題。請記住設置基於文件的idempotentrepository選項或自定義選項,否則最終會在重新啓動或文件數超過1000時出現相同的問題。 – techuser 2013-03-10 15:21:46

1

從駱駝FTP2文檔:

的FTP用戶將默認離開 遠程FTP服務器不變消耗文件。你必須明確地配置它,如果你想 它刪除文件或將它們移動到另一個位置。例如, 可以使用delete = true來刪除文件,或使用move = .done將文件移動到隱藏完成子目錄。

要刪除的文件,路徑更改爲

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

確保連接的用戶所需的權限。

+0

感謝您的評論,但我不希望刪除源文件。我的意圖是駱駝從sftp源複製所有文件然後停止,所以我想在Unix上實現一個遞歸拷貝,如'cp -r',但是通過SFTP。我現在已經找到了解決方案,我會在這裏發佈答案。 – mdo 2013-03-09 08:19:40