如何在Camel中使用** direct **端点实现并行处理?

时间:2014-11-14 09:33:22

标签: java parallel-processing apache-camel

以下测试代码无法正常工作

from("direct:start").setExchangePattern(ExchangePattern.InOnly).threads(5).delay(2000).bean(MessageHeaderValidator.class);

虽然 seda 是另一种选择,但请参阅Camel seda document。建议使用直接端点。

线程池

请注意通过执行以下操作将线程池添加到SEDA端点:

from("seda:stageName").thread(5).process(...)

可以结束两个BlockQueues:一个来自SEDA端点,一个来自线程池的工作队列,这可能不是你想要的。相反,你可能希望配置一个带有线程池的Direct端点,可以同步和异步处理消息。例如:

from("direct:stageName").thread(5).process(...) 

您还可以直接配置处理SEDA端点上的消息的线程数 使用concurrentConsumers选项。

2 个答案:

答案 0 :(得分:1)

对于并行处理,请使用Camel的SEDA组件和concurrentConsumers选项:

from("seda:stageName?concurrentConsumers=5")
    .process(...);

答案 1 :(得分:0)

根本原因是,消息在for循环中逐个传递,其中producerTemplate是阻塞的。