Java Camel文件使用者在使用目录中的大量文件时行为极其缓慢

Java Camel文件使用者在使用目录中的大量文件时行为极其缓慢,java,apache-camel,switchyard,Java,Apache Camel,Switchyard,我使用的开关站是apache camel的包装器。My file consumer从一个目录中使用,该目录中写入了大量文件(有时为2000000)。我的消费者的理想消费速度是每秒1000多个文件,但当写入的文件超过50000个时,我的消费者会变慢,消费速度会降低5倍 我已经禁用了sortBy选项,甚至启用了shuffle选项。但是没有运气。这是我的文件绑定细节 <file:binding.file name="XXXXXXXXXXXX"> <file:addit

我使用的开关站是apache camel的包装器。My file consumer从一个目录中使用,该目录中写入了大量文件(有时为2000000)。我的消费者的理想消费速度是每秒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>

目录路径
错误的
100
20
符合事实的
目录路径
马克菲尔

即使入站目录中有大量文件,我如何使我的使用者保持每秒1000个文件的相同使用速度?

您的配置告诉Camel:

  • 每秒轮询10次(延迟=100毫秒)
  • 每次最多阅读20篇
那么,我估计你每秒会收到大约200个文件

设置文件:
maxMessagesPerPoll=200

当然,假设所有的下游处理都可以处理额外的负载

正如@Conffusion在上面所评论的,您正在洗牌文件列表。因此,这可能会创建一个包含所有文件的列表,然后将其洗牌,并给出所需的编号。 你真的需要它作为你需求的一部分吗

从本质上说…使用每个文件参数,看看它会产生什么影响。

我认为这是一个文件夹中有这么多文件的根本原因

您应该能够使用操作系统中的标准工具来验证这个假设,比如Linux上的
ls
,或者Windows上的
dir
。只需比较创建了所有这些文件的命令的执行时间


至于解决方案-我建议将这些文件拆分为子目录,如问题中所述。

为什么
shuffle=true
?要洗牌一些东西,你需要先建立完整的列表。是的,下游可以处理额外的负载,如果有的话。但我的问题是,当文件数量增加时,消耗速度会降低。我假设这是因为camel文件组件首先对文件进行排序,然后使用它。是否有任何选项通知camel随机选择文件?