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