我使用apache来处理在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");发布于 2018-10-08 14:38:11
我用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}");发布于 2017-01-03 21:23:23
将ftp端点配置为直接使用redis幂等存储库,而不是之后路由中的幂等使用者EIP。这确保只有一个ftp使用者正在处理同一个文件。
如果你有骆驼在行动,第二版书,它涵盖在交易章节的下半部分。
https://stackoverflow.com/questions/41440962
复制相似问题