2014-10-05 114 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)