【问题标题】:How to write camel route that handles request concurrently如何编写同时处理请求的骆驼路线
【发布时间】:2014-11-29 23:28:21
【问题描述】:

我正在尝试编写一个骆驼路由,它使用来自 JMS 队列的传入消息并在不同线程中同时处理它们。我得到的骆驼路线是这样的:

<camel:endpoint id="requestQueue" uri="jms:queue.request" camelContextId="camel"/>
<camel:endpoint id="responseQueue" uri="jms:queue.response" camelContextId="camel"/>

<camel:camelContext id="camel">
    <camel:threadPool id="serviceThreadPool" poolSize="10" threadName="workerThread" maxPoolSize="20"/>

    <camel:route id="requestServingRoute">
        <camel:from ref="requestQueue"/>

        <camel:threads executorServiceRef="serviceThreadPool">
            <camel:to uri="bean:doSomething"/>
            <camel:to ref="responseQueue"/>
        </camel:threads>
    </camel:route>
</camel:camelContext>

但是,我可以观察到传入的消息确实是由单独的线程处理的,但是它们是按顺序处理的。

我试图实现的是,camel 在 doSomething bean 中为每个传入请求在单独的线程中处理每个请求。

我怎样才能做到这一点?

非常感谢。

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    您需要为 JMS 请求队列指定并发消费者的数量。见http://camel.apache.org/jms.html。您不需要向线程池发送消息。例如,在 Java DSL 语法中,您会编写如下内容:

    from("jms:queue.request?concurrentConsumers=10")
    .beanRef("bean", "doSomething")
    .to("jms:queue.response)
    

    【讨论】:

    • 知道如何为持久主题做些什么吗?它一次只允许一条消息
    猜你喜欢
    • 2014-02-09
    • 2015-05-11
    • 2023-04-06
    • 2023-01-28
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多