【问题标题】:Request only messaging with direct-vm in camel routes在骆驼路由中仅请求与 direct-vm 的消息传递
【发布时间】:2015-07-24 04:43:08
【问题描述】:

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

我有以下骆驼路线定义:

<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 创建的线程完成)?

【问题讨论】:

    标签: apache-camel fuseesb jbossfuse


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我也是这么想的。我看到了一张让 direct-vm 异步的票。通过使用 vm 或 seda,线程总是会监听请求并试图避免这种情况。
    【解决方案2】:

    直接组件设计为同步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>
    

    【讨论】:

    • 谢谢,我也是这么想的。我看到了一张让 direct-vm 异步的票。通过使用 vm 或 seda,线程总是会监听请求并试图避免这种情况。
    猜你喜欢
    • 2021-09-24
    • 1970-01-01
    • 2015-05-11
    • 2018-08-19
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多