我试图从smb://
端点下载大量文件,我希望文件消耗尽可能快 - 这意味着我想下载并处理尽可能多的文件,例如轮询2000个文件而不是无论Camel中的默认轮询值是什么。为此,我一直在寻找一种方法来增加传入的批处理大小或在单个文件夹上添加多线程/并行消耗。
到目前为止,我已经尝试了以下内容,但我注意到下载率保持与一个线程相同:
from("smb:\\someFolder?&maxMessagesPerPoll=1000")...
from("smb:\\someFolder?&maxMessagesPerPoll=-1")...
from("smb:\\someFolder").threads(20)...
即使使用threads
选项,尽管看到线程ID不同,但下载速率是相同的。我想Camel只需要一个线程池,这样不同的线程每次都会获取传入的文件,但轮询量是相同的。
我也查找了concurrentConsumers
标志,但是从我收集的内容来看,它不支持文件,而是支持ActiveMQ。
我设法应用的唯一效率修复是从多个smb://
端点消耗。当我这样做时,吞吐率迅速增加。我想知道是否有办法实现与多个文件夹相同的结果,但只使用一个文件夹?
要实现您的目标,您只需运行应用程序的多个实例即可。
但是如果你这样做,一定要使用file component的不同锁定策略进行测试,并观察Camel日志是否存在锁定问题。
如果消费者之间存在并发性,您可以多次处理同一文件,或者您可能会收到错误,因为一个实例想要使用的文件已经消失,因为它已被另一个实例使用。
如果您使用并发消费者,请查看shuffle
选项。这会随机处理文件列表,从而降低多个消费者尝试同时使用同一文件的可能性。