Camel并行处理选项

时间:2014-11-04 13:16:27

标签: multithreading apache-camel

我正在使用Camel 2.10的RedHat Fuse Service Works中的Camel路线。

我想知道以下实现之间的区别:

1 /使用SEDA路线

    from("A")
    .split(body())
    .to("seda:B");

    from("seda:B?concurrentConsumers=4")
    .routeId("MySEDATestRoute")
    .to("C")
    .end();

2 /使用并行处理

   from("A")
    .split(body())
    .parallelProcessing()
    .to("C");

3 /使用线程

    from("A")
    .split(body())
    .threads()
    .to("C");

从我所见,方法3(线程)允许配置线程池大小,它看起来与" concurrentConsumers"解决方案1(SEDA)。

如果我没有将任何参数传递给方法线程,方法2和3的行为是否相同?

提前致谢,

此致

2 个答案:

答案 0 :(得分:1)

您可以在1),3)中设置线程编号,但1)仍然可以从其他路径接收来自(xxx).to(" seda:B")的消息。 2)您需要设置ExecutorService(或ThreadPool),否则parallelProcessing将无法正常工作。

答案 1 :(得分:0)

以下是工作示例代码:

CamelContext context = getContext();
ExecutorService service = new ThreadPoolBuilder(context).poolSize(10).maxPoolSize(150).maxQueueSize(150).build("CustomPool");

from("properties:{{file.fromLocation}}")
    .log("Received the file...")
    .split().tokenize("\n").executorService(service)
    .streaming()
    .parallelProcessing()