删除集群

时间:2017-01-03 10:07:49

标签: java apache-camel cluster-computing idempotent

我使用apache camel来处理在ftp频道上收到的文件。我的应用程序部署在一个集群(4个节点)中,为此我使用RedisIdempotentRepository来确保单个节点处理该文件。我的问题是我想在处理后删除文件,如果我使用delete=true,处理文件的节点A完成后会删除文件,节点B已经删除它,因为节点B不会去通过过滤器,因此它将直接访问删除。

我想知道如何只允许节点A删除文件?

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

2 个答案:

答案 0 :(得分:0)

将ftp端点配置为直接使用redis idempotent存储库,而不是之后路由中的幂等消费者EIP。这确保只有1 ftp的消费者正在处理同一个文件。

如果你有第二版的Camel in Action,它将在交易章节的后半部分进行讨论。

答案 1 :(得分:0)

我使用pollEnrich解决此问题:

在处理结束时添加删除步骤:

.pollEnrich(remoteLocation + "?delete=true&fileName=${file:name}");

完整示例路由:

String remoteLocation = "sftp://host:port/folder";

from(remoteLocation)
 .idempotentConsumer(simple("${file:onlyname}"),
     RedisIdempotentRepository.redisIdempotentRepository(redisTemplate, "camel-repo"))
 .bean("orderTrackingFileProcessor")
 .pollEnrich(remoteLocation + "?delete=true&fileName=${file:name}");