Apache camel Apache Camel-将大文件复制到使用者文件夹中

Apache camel Apache Camel-将大文件复制到使用者文件夹中,apache-camel,Apache Camel,我有一个路径,希望将各种文件复制到传入文件夹中。路由将继续将这些文件移动到临时文件夹中,并在其中执行其他操作。路线如下: <route id="incoming" > <from uri="file://my/path/incoming"/> <to uri="file://my/path/incoming/temp"/> </route> <from uri="

我有一个路径,希望将各种文件复制到传入文件夹中。路由将继续将这些文件移动到临时文件夹中,并在其中执行其他操作。路线如下:

       <route id="incoming" >
            <from uri="file://my/path/incoming"/>
            <to uri="file://my/path/incoming/temp"/>
        </route>
<from uri="file://my/file/path?readLockCheckInterval=3000&amp;readLock=changed"/>
修改后的uri如下所示:

       <route id="incoming" >
            <from uri="file://my/path/incoming"/>
            <to uri="file://my/path/incoming/temp"/>
        </route>
<from uri="file://my/file/path?readLockCheckInterval=3000&amp;readLock=changed"/>


但是仍然没有运气

检查中的
readLock
选项

由使用者使用,仅在文件上具有独占读取锁定(即文件未进行或正在写入)时轮询文件。Camel将等待文件锁定被授予

此选项提供内置策略:

markerFileCamel创建一个标记文件(fileName.camelLock),然后在其上保留一个锁

已更改正在使用文件长度/修改时间戳检测文件当前是否正在复制。将至少使用1秒。要确定这一点,此选项不能像其他选项那样快速地使用文件,但可以更可靠,因为JDK IO API无法始终确定文件当前是否正在被其他进程使用。readLockCheckInterval选项可用于设置检查频率

fileLock用于使用java.nio.channels.fileLock。当通过装载/共享访问远程文件系统时,应避免使用这种方法,除非该文件系统支持分布式文件锁

rename用于在可以获得独占读取锁定的情况下,使用尝试重命名文件作为测试


readLock=changed选项在这种情况下似乎是合适的。如果制作人将文件写入传入文件夹的速度非常慢,则可能会出现问题

另一个选项是使用done文件名。您可以让原始生产者在文件写入完成后创建一个已完成的文件

更常见的是,每个目标文件有一个完成的文件。这意味着有 1:1的相关性。为此,必须在中使用动态占位符 doneFileName选项。目前,Camel支持以下两种 动态标记:file:name和file:name.noext,必须将其括起来 在${}中。使用者仅支持完成文件的静态部分 名称作为前缀或后缀(不是两者)

from(“file:bar?doneFileName=${file:name}.done”)
在本例中,如果存在名为file的done文件,则仅轮询文件 完成了


这样的事情会解决的。如果它的非驼峰系统正在将您的大文件复制到InputDir中,那么您必须注意在复制文件后创建.DONE文件。一旦.DONE文件可用,路由将开始处理

    from("file://" + InputDir + "?delay=500&doneFileName=${file:name}.DONE")
    .to("file://" + OutputDir + "?fileName=${date:now:yyyyMMdd}/${file:name}&doneFileName=${file:name}.DATA.READY.DONE");

这可能是游戏的后期,但在路由URI中使用
fileExist=Append
。例如:

<route id="incoming" >
    <from uri="file://my/path/incoming"/>
    <to uri="file://my/path/incoming/temp?fileExist=Append"/>
</route>


我已经尝试了所有这些策略,但是运气不好。请检查更新并查看我正在使用的URI。@ChrisGeo您找到解决方案了吗?我在使用
readLock
readLockCheckInterval
时遇到1gb文件问题。应该处理您的异常。例外情况是它无法读取该文件。通过处理异常,您可以停止路由、暂停路由、发送电子邮件、发送tweet以支持或正确处理路由。当不使用这些选项时,您没有收到异常。对吗?我面临同样的问题,正在寻找解决方案。所提到的
已更改。。。readLockCheckInterval。。。此选项仅适用于驼峰2.8版以后的FTP组件。
。不确定更改的或readLockCheckInterval或两者仅适用于FTP。