Apache camel:停止交换继续删除=真
Apache camel: Stop exchange from proceeding to delete=true
我只想允许从源目录中删除非重复文件。我有一条这样的幂等消费者路线:
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 将导致路由从源中删除重复的消息directory.To防止这种情况发生,我尝试了以下代码:
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 导致删除已处理的消息,而不是 duplicated.You 在路由内配置幂等回购,但需要使用幂等回购配置 sftp 消费者。之后,如果已处理的文件再次出现在文件夹中,消费者将停止使用并删除这些文件。像这样:
from("sftp:someServer:somePort/someDir?delete=true&idempotent=true&idempotentRepository=#yourRepo")
我只想允许从源目录中删除非重复文件。我有一条这样的幂等消费者路线:
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 将导致路由从源中删除重复的消息directory.To防止这种情况发生,我尝试了以下代码:
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 导致删除已处理的消息,而不是 duplicated.You 在路由内配置幂等回购,但需要使用幂等回购配置 sftp 消费者。之后,如果已处理的文件再次出现在文件夹中,消费者将停止使用并删除这些文件。像这样:
from("sftp:someServer:somePort/someDir?delete=true&idempotent=true&idempotentRepository=#yourRepo")