【发布时间】:2015-07-18 22:06:06
【问题描述】:
我们需要同时处理多个任务,每个任务需要将近 10 秒才能完成处理。我们的骆驼路线是这样的。
<route id="routeA">
<from uri="activemq:queue:queueA" />
<to uri="direct-vm:genericProcessing" />
</route>
<routeid="routeB">
<from uri="activemq:queue:queueB" />
<to uri="direct-vm:genericProcessing" />
</route>
<route id="routeC">
<from uri="direct-vm:genericProcessing" />
<!--Run business rules -->
<inOnly uri="vm:timeTakingRoute" /> <!-- this takes 10 sec to complete />
</route>
来自 vm:timeTakingRoute 的请求应该在单线程中运行,因为它需要 DB 事务。如果我们使用带有 vm 端点的 inOnly 交换模式,请求会异步运行,但由于从这里完全处理请求至少需要 10 秒,其他请求可能会堆积直到第一个请求完成。我们如何产生线程来同时运行请求。我能想到的可能选项是在 vm 上使用 concurrentconsumers 选项,用定义了并发消费者的 activemq 替换 vm,用自定义线程池替换 vm 或者定义如下?
<threads>
<to uri="vm:timeTakingRoute" />
</threads>
解决此问题的最佳选择是什么?
【问题讨论】:
标签: java apache-camel fuseesb jbossfuse