2014-10-05 3 views
0

Я пытаюсь написать маршрут верблюда, который потребляет входящее сообщение из очереди 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> 

Однако то, что я могу наблюдать, что входящее сообщение, действительно обрабатывается отдельными потоками, но они обрабатываются в последовательном порядке.

Что я пытался достичь, так это то, что верблюд обрабатывает каждый запрос в doSomething bean в отдельных потоках для каждого входящего запроса.

Как я могу это достичь?

спасибо.

ответ

4

Необходимо указать количество одновременных потребителей для очереди запросов JMS. См. http://camel.apache.org/jms.html. Вам не нужно сообщать об этом пулам потоков. например, в синтаксисе Java DSL вы должны написать что-то вроде:

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