【问题标题】:Apache camel: Stop exchange from proceeding to delete=trueApache骆驼:停止交换继续删除=真
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 该问题已被处理,重复消息被幂等 EIP 删除。我将尝试使用具有幂等性的端点
  • 正如我所说,这会导致您同时使用两个文件(原始文件和重复文件)。消费者将毫无例外地删除任何已处理的文件。这就是 delete=true 的工作原理。当您的途中幂等 repo 发现重复并且消费者不会删除它时,您可以抛出异常,但这不是一个好方法。
  • 幂等读锁不适用于 ftp 端点,我可能对此感到困惑,只是幂等消费者。这是正确的答案。另外,在代码 sn-p 的端点选项中添加 idempotent=true :)
  • 将答案标记为正确,有人应该阅读 cmets 以了解它对您有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2014-08-28
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多