我正在使用 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/