2012-04-02 61 views
3

我有興趣找出在Apache Camel中直接處理的最佳方法。Apache Camel中的直通處理

我有幾個不同的組件,我可以在同一個JVM中啓動,它與我的activemq代理不同。嘗試設置它是否有意義,以便我的消息從一個組件傳遞到下一個組件,以便阻止?我將如何設置駱駝以確保每條消息在下一條消息啓動之前碰撞路線上的每個組件?

更具體一點:我想通過我的brokerURI或其他東西來配置。我看到此頁面:http://fusesource.com/wiki/display/ProdInfo/Understanding+the+Threads+Allocated+in+ActiveMQ,但我不確定在哪裏/如何實施選項 - optimizedDispatch似乎適用於代理destinationPolicy選項。

感謝

回答

5

開始,明確地配置您的路線,從隊列中消耗了單個消費者...

無論是全球範圍內爲所有連接

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="concurrentConsumers" value="1"/> 
    <property name="maxConcurrentConsumers" value="1"/> 
</bean> 

或明確每個路由/消費者

那麼,你有幾個選擇。一般來說,您可以使用管道模式在單個路由中的步驟之間(同步)傳遞消息。或者使用camel-direct在多個路由之間提供同步消息流。

from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConcumers=1") 
    .to(<step1>) 
    .to(<step2>) 
    ... 

,或者如果你的步驟需要多條路線,然後使用直接連接它們...

from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConsumers=1") 
    .to("direct:step1"); 

from("direct:step1") 
    //perform step1 processing 
    .to(direct:step2"); 

from("direct:step2") 
    //perform step2 processing 
    .to(direct:step3"); 
... 
+0

所以它必須對消費者是從每一次讀取隊列中添加?沒有辦法爲代理控制中的所有隊列配置此功能? – Derek 2012-04-03 17:55:35

+0

這也可以在全球範圍內完成...我相應地更新了答案 – 2012-04-03 19:36:50

+0

在代理上設置async和dispatchAsync選項如何?是直通處理所必需的,我可以使用TCP傳輸嗎? – Derek 2012-04-04 18:35:15

相關問題