Multithreading 骆驼并行处理选项

Multithreading 骆驼并行处理选项,multithreading,apache-camel,Multithreading,Apache Camel,我在RedHat Fuse Service Works的骆驼路线上工作,该服务具有骆驼2.10 我想知道以下实现之间的差异: 1/使用SEDA路线 from("A") .split(body()) .to("seda:B"); from("seda:B?concurrentConsumers=4") .routeId("MySEDATestRoute") .to("C") .end(); 2/使用并行处理 from("A")

我在RedHat Fuse Service Works的骆驼路线上工作,该服务具有骆驼2.10

我想知道以下实现之间的差异:

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(线程)允许配置线程池大小,这似乎与解决方案1(SEDA)的“concurrentConsumers”相同

如果我不向方法线程传递任何参数,方法2和方法3的行为会相同吗

提前感谢,


关于

您可以在1)、3)中设置线程编号,但1)仍然可以从其他路径接收消息,就像从(xxx).到(“seda:B”)。
2) 您需要设置ExecutorService(或线程池),否则并行处理将无法正常工作。

下面是工作示例代码:

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()

所以,我想说的是,如果我确信我不会有其他途径进入,我应该使用解决方案3),类似于.threads(2,10)?您没有提供原始问题的任何答案。他很难理解CamelContext线程池与SEDA concurrentConsumer的区别