gpt4 book ai didi

java - Apache Camel : Stop exchange from proceeding to delete=true

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:17 25 4
gpt4 key购买 nike

我只想允许从源目录中删除非重复文件。我有一条具有幂等消费者的路线,如下所示:

File repo = new File("repo.txt");
IdempotentRepository fr = FileIdempotentRepository.fileIdempotentRepository(repo);

from("sftp:someServer:somePort/someDir?delete=true")
.idempotentConsumer(header("CamelFileName"),fr)
.to("file:output");

在这种情况下,delete=true 将导致路由从源目录中删除重复的消息。为了防止这种情况,我尝试了以下代码:

File repo = new File("repo.txt");
IdempotentRepository fr = FileIdempotentRepository.fileIdempotentRepository(repo);

from("sftp:someServer:somePort/someDir?delete=true")
.idempotentConsumer(header("CamelFileName"),fr)
.skipDuplicate(false)
.filter(exchangeProperty(Exchange.DUPLICATE_MESSAGE).isEqualTo(true))
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.setException(new InterruptedException("Cancel Exchange"));
exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
}
})
.end()
.to("file:output");

由于从路由内的 sftp 删除将需要另一个 jsch 实例,因此我希望能够使用 sftp 使用者的删除属性

最佳答案

我可能是错的,但delete=true会导致删除已处理的消息,而不是重复。您在路由内配置幂等存储库,但需要使用幂等存储库配置sftp消费者。之后,如果已处理的文件再次出现在文件夹中,消费者将停止使用并删除它们。像这样:

from("sftp:someServer:somePort/someDir?delete=true&idempotent=true&idempotentRepository=#yourRepo")

关于java - Apache Camel : Stop exchange from proceeding to delete=true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com