java - 如何编写并发处理请求的 Camel 路由

标签 java apache-camel

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

<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 中的每个请求。

我怎样才能实现这个目标?

非常感谢。

最佳答案

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

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

关于java - 如何编写并发处理请求的 Camel 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26203783/

相关文章:

java.lang.IllegalAccessError : tried to access method net. sourceforge.tess4j.Tesseract.<init>()V 来自类 Tess4jTest.TestTess

java - 我们如何在 Kafka 发布/订阅中对消息进行版本控制?

java - 如何针对特定场景正确使用Apache Camel?

xquery - 在通过 Camel 调用的 XQuery 中使用外部文档参数

java - Camel 从 Tracer 到 BacklogTracer

java - Apache Camel Java DSL 将类参数传递给 bean 方法

java - AspectJ 找不到 .raw 父类(super class)

java - 在Java中的父类(super class)的构造函数中获取扩展泛型类的泛型类型?

java - readTree Jackson无法解析

java - Camel Wire Tap - 用于接受两个输入