Apache骆驼:从继续进行delete = true

时间:2018-10-05 11:16:27

标签: java apache-camel esb dsl

我只希望从源目录中删除非重复文件。我与这样的幂等消费者有一条路线:

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实例,因此我希望能够使用sf​​tp使用者的delete属性

1 个答案:

答案 0 :(得分:0)

我可能是错误的,但是delete = true会导致删除已处理的消息,而不是重复的消息。您在路由内部配置了幂等回购,但是需要为sftp使用者配置幂等回购。此后,使用方将停止使用和删除已处理的文件(如果它们将再次出现在文件夹中)。像这样:

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