Apache Camel消费者模板要复制文件,不能两次复制一个文件

时间:2015-12-03 05:04:33

标签: apache-camel

您好我正在使用apache camel 2.15.2。我有一个消费者模板,以便我可以使用动态文件名复制文件:

if (fileInfo != null) {
            filename = fileInfo.getFileName();
            String camelUri = "file://" + fileInfo.getCopyFilePath() + "/?fileName=RAW("
                    + filename + ")&noop=false&idempotent=false&readLock=changed";
            System.out.println("Camel uri: " + camelUri);
            logger.info("Camel uri: " + camelUri);

            Exchange ex = consumerTemplate.receive(camelUri);
....

正如您所看到的,我已经设置了noop和idempotent,以实现多次复制同一个文件。但是,它没有那样做。它挂起在receive方法上,以便后续尝试复制具有相同名称的文件。只有在我们重新启动应用程序时,它才能复制它。任何建议将不胜感激。它可能与此issue类似,但我无法访问该解决方案。提前谢谢。

当我通过Camel代码进行调试时,它似乎调用了EventDrivenPollingConsumer的receive方法,并在调用queue.take()(第110行,EventDrivenPollingConsumer)时挂起。而且,即使在里面,也要计算' ArrayBlockingQueue中的变量为零:

while (count == 0)
                notEmpty.await();

添加了这个,以防它有助于任何人有线索。

1 个答案:

答案 0 :(得分:0)

好的,如果我调用'consumerTemplate.doneUoW(ex)',它会复制多次。但是,同时它正在删除(实际上移动到.camel文件夹)源文件,我不想这样做!然后,必须设置noop = true:

if (fileInfo != null) {
        filename = fileInfo.getFileName();
        String camelUri = "file://" + fileInfo.getCopyFilePath() + "/?fileName=RAW("
                + filename + ")&noop=true&idempotent=false&readLock=none";
        System.out.println("Camel uri: " + camelUri);
        logger.info("Camel uri: " + camelUri);

        Exchange ex = consumerTemplate.receive(camelUri);
        // consumerTemplate.r
        logger.info("File received: " + fileInfo.getFileName());
        exchange.getOut().setBody(ex.getIn().getBody());

        consumerTemplate.doneUoW(ex);
    }

现在,它按预期工作。