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

Chr*_*Geo 2 apache-camel

我有一条路线,希望将各种文件复制到传入的文件夹中.该路线将继续将这些文件移动到临时文件夹中,在那里它将执行其他操作.路线如下:

       <route id="incoming" >
            <from uri="file://my/path/incoming"/>
            <to uri="file://my/path/incoming/temp"/>
        </route>
Run Code Online (Sandbox Code Playgroud)

问题是这些文件可能非常大.让我们说1Gb.为了将此文件复制到传入文件夹,可能需要10秒钟.在这10秒钟内,Consumer轮询目录并抛出异常,因为仍在复制部分文件.我可以使用哪种解决方法?

我使用readLock所有策略(主要是更改)但我得到一个例外:

(The process cannot access the file because it is being used by another process)
Run Code Online (Sandbox Code Playgroud)

修改后的uri如下:

<from uri="file://my/file/path?readLockCheckInterval=3000&amp;readLock=changed"/>
Run Code Online (Sandbox Code Playgroud)

但是仍然没有运气

Ric*_*lla 5

检查readLock" 文件"组件中的选项

消费者使用的,如果文件对文件具有独占读锁(即文件未在进行中或正在写入),则仅轮询文件.Camel将等待文件锁被授予.

此选项提供内置策略:

markerFile Camel创建一个标记文件(fileName.camelLock),然后对其进行锁定.

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

fileLock用于使用java.nio.channels.FileLock.通过mount/share访问远程文件系统时应避免使用此方法,除非该文件系统支持分布式文件锁.

如果我们可以获得独占读锁,则重命名是用于尝试将文件重命名为测试.