骆驼smb://-占用一个文件夹中的许多文件

时间:2019-04-18 13:31:53

标签: java apache-camel smb

我正在尝试从smb://端点下载大量文件,我希望文件消耗尽可能快-这意味着我想下载并处理尽可能多的文件,以便示例轮询2000个文件,而不是Camel中的默认轮询值。为此,我正在寻找一种增加传入批处理大小或在单个文件夹上添加多线程/并行消耗的方法。

到目前为止,我已经尝试了以下方法,但是我发现下载速率与一个线程相同:

from("smb:\\someFolder?&maxMessagesPerPoll=1000")...

from("smb:\\someFolder?&maxMessagesPerPoll=-1")...

from("smb:\\someFolder").threads(20)...

即使使用threads选项,尽管看到线程ID有所不同,但下载速率相同。我想骆驼只是简单地分配一个线程池,以便每次都有一个不同的线程来拾取传入的文件,但是轮询量是相同的。

我还查找了concurrentConsumers标志,但是从我的收集来看,它不支持文件(而不是ActiveMQ)。

我设法应用的唯一效率修复方法是消耗多个smb://端点。当我这样做时,吞吐率迅速提高。我想知道是否有一种方法可以实现与多个文件夹相同的结果,但仅使用单个文件夹?

1 个答案:

答案 0 :(得分:0)

要实现所需的功能,您可以简单地运行应用程序的多个实例

但是,如果执行此操作,请确保使用file component不同的锁定策略进行测试,并观察Camel日志中是否存在锁定问题。

如果使用者之间存在并发性,则您可以多次处理同一个文件,或者由于一个实例要使用的文件已被另一个实例使用而丢失了,因此可能会出错。

如果使用并发使用者,请查看shuffle选项。这会随机整理要随机处理的文件列表,从而降低了多个使用者尝试同时使用同一文件的可能性。