我正在使用switchyard,它是apache骆驼的包装纸。我的文件使用者从一个写入大量文件(有时为2,000,000个)的目录中使用。我的使用者的理想消耗速度是每秒1000个以上的文件,但是当写入超过50000个文件时,我的使用者会变慢,消耗速度会降低5倍。
我禁用了sortBy选项,甚至启用了shuffle选项。但是没有运气。这是我的文件绑定细节。
<file:binding.file name="XXXXXXXXXXXX">
<file:additionalUriParameters>
<file:parameter name="antInclude" value="*.xml"/>
<file:parameter name="consumer.bridgeErrorHandler" value="true"/>
<file:parameter name="shuffle" value="true"/>
</file:additionalUriParameters>
<file:directory>directory path</file:directory>
<file:autoCreate>false</file:autoCreate>
<file:consume>
<file:delay>100</file:delay>
<file:maxMessagesPerPoll>20</file:maxMessagesPerPoll>
<file:delete>true</file:delete>
<file:moveFailed>directory path</file:moveFailed>
<file:readLock>markerFile</file:readLock>
</file:consume>
</file:binding.file>
即使入站目录中有大量文件,如何使我的使用者保持1000个文件/秒的相同消耗速度?
答案 0 :(得分:1)
您的配置告诉Camel:
所以,我希望您每秒获得200个文件?
设置文件:maxMessagesPerPoll=200
。
当然,前提是您所有的下游处理都可以处理该额外负载。
正如@Conffusion上面所述,您正在重新排列文件列表。因此,这很可能会创建所有文件的列表,然后将其混洗并为您提供所需的编号。 您是否真的需要它作为您需求的一部分?
基本上...使用每个文件参数,看看会产生什么影响。
答案 1 :(得分:0)
我建议filesystem performance是根本原因,因为单个文件夹中有那么多文件。
您应该能够使用操作系统中的标准工具验证该假设,例如Linux上的ls
或Windows上的dir
。只需比较创建所有这些文件的命令的执行时间即可。
关于解决方案-我建议将这些文件分成子目录,如this answer至NTFS performance and large volumes of files and directories问题中所述。