删除集群中已处理的文件 apache-camel
Delete processed file apache-camel in a cluster
我使用 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");
配置 ftp 端点直接使用 redis 幂等存储库,而不是之后路由中的幂等消费者 EIP。这确保只有 1 ftp 个消费者正在处理同一个文件。
如果你有 Camel in Action 第 2 版,它会在交易章节的第二部分介绍。
我使用 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}");
我使用 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");
配置 ftp 端点直接使用 redis 幂等存储库,而不是之后路由中的幂等消费者 EIP。这确保只有 1 ftp 个消费者正在处理同一个文件。
如果你有 Camel in Action 第 2 版,它会在交易章节的第二部分介绍。
我使用 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}");