Я хочу разрешить удаление только неповторяющихся файлов из исходного каталога.У меня есть маршрут с идемпотентным потребителем, такой как:
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, я бы предпочел использовать свойство delete для потребителя sftp