繁体   English   中英

使用Apache Camel并行处理多个文件

[英]Parallel processing of multiple files using Apache Camel

我有数千个文件要单独处理。 我使用 Apache Camel 来处理文件

from("file:C:\\datafiles\\input?readLock=changed&readLockTimeout=100&readLockCheckInterval=20") .process(new MyProcessor()).to("file:C:\\datafiles\\output");

我一次做一个文件,需要 30 分钟。

我想我可以在 10 个并发线程中完成这个处理,一次 10 个文件,我可能可以在 3 分钟而不是 30 分钟内完成。

我的问题是,实现我的 10 个线程的“正确”方法是什么? 完成后,创建一个新的,最大数量为 10。

当我在互联网上搜索时,我得到了一些建议,例如使用

  1. 每个轮询的最大消息数
  2. 线程(10)
  3. 聚合器

但是我在这里与聚合器没有任何关系,只需要从一个远程位置处理每个文件,处理它然后将它们放在另一个远程位置。

可以使用下面的代码来实现多线程。

public class RouterConfig extends RouteBuilder {
    public void configure() throws Exception {
        from("file:C:\datafiles\input?readLock=changed&readLockTimeout=100&readLockCheckInterval=20&maxMessagesPerPoll=3") 
        .threads(3, 3, "myThread")
        .process(new MyProcessor())
        .to("file:C:\datafiles\output");
    }
}

这里的线程 api 将创建 3 个线程。 maxMessagesPerPoll=3 将在一次轮询中选取 3 个文件并将一个文件传递给一个线程,就像这里明智地选取 3 个文件(file1、file2、file3)并为一个文件提供 3 个线程(thread1、thread2、thread3)。

  • 因此,“file1”将由“thread1”处理,并且
  • “file2”将由“thread2”处理
  • “file3”将由“thread3”处理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM