当前位置: 首页 > 知识库问答 >
问题:

Apache Camel使用者模板复制文件,不能将一个文件复制两次

谷梁宏恺
2023-03-14

嗨,我正在使用apache Camel2.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);
....

当我通过Camel代码调试时,它似乎在调用EventDrivenPollingConsumer的receive方法,并在调用Queue.take()(第110行,EventDrivenPollingConsumer)时挂起。而且,即使在其中,ArrayBlockingQueue中的'count'变量也是零:

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

加了这个,以防万一对有线索的人有帮助。

共有1个答案

艾修筠
2023-03-14

好的,如果我调用'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);
    }

现在,它按预期工作。

 类似资料:
  • 我有一个路由,期望各种文件将被复制到一个传入文件夹。路由将继续将这些文件移动到一个临时文件夹中,并在其中执行其他操作。路线如下: 问题是这些文件可能相当大。假设是1GB。为了将这个文件复制到传入文件夹中,可能需要10秒的时间。在这10秒期间,使用者轮询目录,并抛出一个异常,因为部分文件仍在复制。我能用什么变通办法?

  • 如何将一个文本文件复制到另一个文本文件中?我试过这个: 这只是在中留下以下值:。 我做错了什么?

  • rank ▲ ✰ vote url 50 404 65 510 url 复制文件 怎么在Python里赋值文件?在os下没找到复制的方法. shutil有许多的方法.其中之一就是: copyfile(src, dst) 把src文件的内容复制给dst.目的地址必须是可写的;否则将会出现IOError错误.如果dst已经存在,将会被覆盖.一些像字符或者块设备不能用这个方法赋值.src和dst是路径

  • 如何使用java将文件从一个文件夹复制到另一个文件夹?我试图使用 如果目标文件夹不包含具有相同名称的文件,则此操作有效。如果我尝试将文件粘贴到文件夹中,它会引发IOException。然而,有什么办法可以解决这个问题吗?可能我只想将自动重命名为pasteItem(1)或类似名称的文件粘贴。请建议。 事实上,如果同名文件已经存在,我将为该文件获得一个新名称。我不知道如何复制文件,然后重命名。如果我先

  • 使用Java8。 为了获得最佳性能,我尝试用复制文件,但很快发现它不支持汉字。例如: 代码打算从jar复制一个文件,但它抛出了一个异常(a“我的" 文件夹已提前创建): 问题是鎴戠殑" 甚至连一个中国人都看不懂,所以我正在寻找一个解决办法来处理汉字。 我也尝试了FileChannel,但失败了,意识到它用于直接文件,而不是在一个jar中的文件。我该怎么做?

  • 我想使用机器人复制简单地复制一个名为的zip文件到一个名为