Apache Camel split与ThreadPool并行运行,为什么?

时间:2017-05-11 11:12:53

标签: multithreading concurrency split apache-camel threadpool

我有一个camelRoute应该在分割中使用threadPool进行并行工作。我的问题是我总是以一个线程结束太多,因为split会运行一个线程而线程池会运行指定数量的线程。我希望线程池能够限制线程数量。

任何人都可以看到为什么会这样?路由和驼峰上下文...(代码中的其他值,如from和id等,但不能显示在这里...)

from(FROM_ENDPOINT)
    .routeId(ID)
    .split(body(), new GroupedExchangeAggregationStrategy())
    .executorServiceRef("ThreadPool")
    .bean(bean, "beanMethod")
    .end()
    .bean(bean)
    .multicast()
    .to(TO_ENDPOINT);

ThreadPool在我的camel-context.xml中配置如下:

<camel:camelContext id="application-context" useMDCLogging="true" xmlns="http://camel.apache.org/schema/spring">
    <propertyPlaceholder id="properties" location="ref:props"/>
    <routeBuilder ref="refToRoute"/>
    <threadPoolProfile id="ThreadPool" maxPoolSize="2"
                       maxQueueSize="-1" poolSize="2"/>
</camel:camelContext>

1 个答案:

答案 0 :(得分:4)

拆分器需要一个后台线程来协调并行工作。所以你有来自线程池的线程+一个名为Warning: Incorrect datetime value: '%2017-05-10%' for column 'update_time' at row 1 的额外线程。

因此,如果您希望总的最大值为10,那么将线程池大小设置为9,这样您就可以为该1个后台线程留出空间。