0

我正在使用 switchyard,它是 apache camel 的包装器。我的文件使用者从写入大量文件(有时 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 个文件/秒的相同消费速度?

4

2 回答 2

1

您的配置告诉骆驼:

  • 每秒轮询 10 次(延迟=100 毫秒)
  • 每次最多阅读 20 篇

那么,我希望您每秒获得大约 200 个文件?

设置文件:maxMessagesPerPoll=200.

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

正如@Conffusion 上面评论的那样,您正在改组文件列表。因此,这可能会创建所有文件的列表,然后对其进行随机播放并为您提供您要求的数字。您真的需要将其作为您要求的一部分吗?

本质上...玩每个文件参数,看看它会产生什么影响。

于 2019-05-08T11:14:11.807 回答
0

我建议文件系统性能是一个文件夹中有这么多文件的根本原因。

您应该能够使用操作系统中的标准工具(例如ls在 Linux 或dirWindows 上)来验证这一假设。只需比较创建所有这些文件的命令的执行时间。

至于解决方案 - 我建议将这些文件拆分为子目录,如此NTFS 性能和大量文件和目录问题的答案中所述。

于 2019-05-08T12:55:57.823 回答