java - Apache骆驼:停止交换继续删除=真
问题描述
我只想允许从源目录中删除非重复文件。我有一条幂等消费者的路线,如下所示:
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 属性
解决方案
我可能是错的,但 delete=true 导致删除已处理的消息,而不是重复的。您在路由内配置幂等 repo,但需要使用幂等 repo 配置 sftp 使用者。之后,如果它们再次出现在文件夹中,消费者将停止消费和删除已处理的文件。像这样:
from("sftp:someServer:somePort/someDir?delete=true&idempotent=true&idempotentRepository=#yourRepo")
推荐阅读
- python - 从 CSV 读取数据并使用 Python 3.7 将其更改为元组
- ffmpeg - FFMPEG 无法将 .MP4 编码为可用的 .Y4M RAW 视频:“不允许操作”
- couchdb - 按 unix 时间戳和分页对 CouchDB 结果进行排序
- security - kubectl 如何比 SSH 守护程序/访问容器更安全?
- ios - 发送作为字典上的元组的枚举并返回
- c# - 尝试从所选目录 c# 启动 .exe 文件
- java - java - 如何将java Object转换为Object []?
- php - 如何通过 curl 'CURLOPT_POSTFIELDS' 动态传递 PHP 变量
- ios - 如何检查 Google/Facebook 帐户是否已用于在 Firebase Auth 上创建帐户
- android - Fragment webView for Button(呼叫或拨号)[Android Studio]