java - Camel 文件使用者在使用目录中的大量文件时表现极其缓慢

标签 java apache-camel switchyard

我正在使用 switchyard,它是 apache Camel 的包装器。我的文件使用者从写入大量文件(有时为 2,000,000 个)的目录中进行消耗。我的消费者的理想消费速度是每秒 1000+ 个文件,但是当写入超过 50000 个文件时,我的消费者变得很慢,消费速度降低了 5 倍。

我已经禁用了 sortBy 选项,甚至启用了 shuffle 选项。但没有运气。这是我的文件绑定(bind)详细信息。

    <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 个文件/秒的相同消费速度?

最佳答案

您的配置告诉 Camel:

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

那么,我预计您每秒会收到大约 200 个文件?

设置文件:maxMessagesPerPoll=200

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

正如 @Conffusion 上面评论的那样,您正在打乱文件列表。因此,这可能会创建所有文件的列表,然后将其打乱并给出您所要求的数量。 您真的需要将其作为您的要求的一部分吗?

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

关于java - Camel 文件使用者在使用目录中的大量文件时表现极其缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56038351/

相关文章:

java - 使用camel文件组件从unix服务器监视Windows网络上的文件夹

jpa - Camel pollEnrich JPA 忽略 namedQuery

java - 从 service-mix 文件轮询器迁移到 apache Camel 文件轮询器

java - 远程 SOAP Web 服务不断断开连接

java - 扩展 HttpEntityEnshingRequestBase 时出错

java - 以原子方式获取 ConcurrentHashMultiset 中的 Multiset 条目( Guava )

java - Jboss 管理控制台在子系统下不显示任何消息传递选项

java - 开关站。如何创建单例服务?

Java swing渐变绘画ISSUE

java - Maven surefire 插件永远挂起