2014-11-04 117 views
5

我正在Camel 2.10的RedHat Fuse Service Works中使用骆驼路由。骆驼并行处理选项

我想知道以下实施方式之间的差异:

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

您可以设置在1号线),3),但1)仍然能够接收来自其他途径的消息,从(XXX)。为了就像( “SEDA:B”)。 2)您需要设置ExecutorService(或ThreadPool),否则parallelProcessing将无法正常工作。

+1

所以干嘛说的是,如果我知道我肯定不会有未来在其他的路线,我应该3)像.threads使用的解决方案( 2,10)? – user3416249 2014-11-05 09:38:55

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

向下选民请提供一些意见! – sunleo 2017-11-20 05:40:09