【发布时间】:2018-10-08 15:27:38
【问题描述】:
我只想允许从源目录中删除非重复文件。我有一条这样的幂等消费者路线:
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 属性
【问题讨论】:
-
您可能需要一个自定义的幂等存储库实现来反转
boolean add(E key)和boolean contains(E key)的逻辑。默认情况下,add将在存储库尚未包含条目并因此可以添加到后备存储时返回 true,而contains的逻辑正好相反。如果在尝试通过add(...)将密钥添加到后备存储时已经存在条目,则基本上希望返回 true,并在检查存储库是否包含条目时返回 false。不过还没有尝试过类似的东西
标签: java apache-camel esb dsl