2017-01-03 79 views
0

我使用apache駱駝來處理在ftp頻道上收到的文件。我的應用程序部署在一個集羣(4個節點)中,爲此,我使用RedisIdempotentRepository確保單個節點處理該文件。我的問題是我想要在處理後刪除文件,如果我使用delete=true,完成時處理該文件的節點A將刪除該文件,節點B已將其刪除,因爲節點B將不會通過該過濾器並且因此它會直接訪問刪除。在羣集中刪除處理的文件apache-camel

我想知道如何只允許節點A刪除文件?

from("sftp://host:port/folder?delete=true) 
.idempotentConsumer(simple("${file:onlyname}"), 
    RedisIdempotentRepository.redisIdempotentRepository(redisTemplate, "camel-repo")) 
.bean("orderTrackingFileProcessor"); 
+0

什麼「過濾器」?當你說節點B將不會通過過濾器,你是什麼意思? –

+0

我的意思是「過濾器」是節點B將檢查文件的名稱是否存在於redis數據庫中。 –

回答

0

將ftp端點配置爲直接使用redis idempotent存儲庫,而不是之後路由中的冪等使用者EIP。這確保只有1個ftp客戶正在處理相同的文件。

如果您有Camel in Action 2nd ed書籍,請參閱交易章節的後半部分。