2017-01-03 9 views
0

私はftpチャネルで受信したファイルを処理するためにapache camelを使用します。私のアプリケーションはクラスタ(4ノード)にデプロイされています。そのために、RedisIdempotentRepositoryを使用して、単一のノードがファイルを確実に処理するようにします。私の問題は、処理後にファイルを削除したい場合です。delete=trueを使用すると、ノードBはファイルを処理し、ファイルを削除します。ノード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

直接ではなく、その後の経路における冪等の消費者のEIPをRedisの冪等のリポジトリを使用するようにFTPエンドポイントを設定します。これにより、1 ftpのコンシューマだけが同じファイルを処理していることが保証されます。

Camel in Action第2版の本をお持ちの場合は、取引の章の後半に記載されています。

関連する問題