仅请求在camel路由中使用direct-vm进行消息传递

时间:2015-05-13 04:17:11

标签: apache-camel fuseesb jbossfuse

我们如何异步处理direct-vm?

我有以下Camel路线定义:

<route id="routeA">
<from uri="activemq:queue:queueA" />
<to uri="direct-vm:someProcessing" />
<to uri="direct-vm:processAsync" />
</route>

<route id="routeB">
<from uri="direct-vm:processAsync">
<threads executorServiceRef="someRef">
 <inOnly uri="direct-vm:timeTakingRoute" />
<threads>
<route>

当队列使用者使用消息并发送到routeB并使用线程DSL调用direct-vm:timeTakingRoute时,queueA的调用者线程仍然等待,直到使用线程DSL创建的线程完成。

我们如何异步处理它(调用者线程不应该等到使用线程DSL创建的线程完成)?

2 个答案:

答案 0 :(得分:3)

直接组件设计为同步http://camel.apache.org/direct-vm.html

请尝试改为使用 seda

<route id="routeA">
    <from uri="activemq:queue:queueA" />
    <to uri="direct-vm:someProcessing" />
    <inOnly uri="seda:processAsync" />
</route>

<route id="routeB">
    <from uri="seda:processAsync" />
    <to uri="direct-vm:timeTakingRoute" />
</route>

答案 1 :(得分:1)

您可以选择sedavm组件。 使用seda时,请注意队列只能在它的CamelContext中可见。 如果您想要CamelContext之间的相互通信,请使用vm组件,这是seda组件的扩展。 阅读更多:seda vm