Multithreading 骆驼并行处理选项
我在RedHat Fuse Service Works的骆驼路线上工作,该服务具有骆驼2.10 我想知道以下实现之间的差异: 1/使用SEDA路线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")
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的区别