我有一个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>
答案 0 :(得分:4)
拆分器需要一个后台线程来协调并行工作。所以你有来自线程池的线程+一个名为Warning: Incorrect datetime value: '%2017-05-10%' for column 'update_time' at row 1
的额外线程。
因此,如果您希望总的最大值为10,那么将线程池大小设置为9,这样您就可以为该1个后台线程留出空间。