2013-09-05 61 views
3

藉此例如:如何提高Seda隊列的性能?

from("seda:data").log("data added to queue") 
        .setHeader("CamelHttpMethod", constant("POST")) 
        .setHeader(Exchange.CONTENT_TYPE, constant("application/json")) 
        .process(new Processor() { 
         public void process(Exchange exchange) throws Exception { 
           exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8"); 
         } 
        }) 
        .recipientList(header(RECIPIENT_LIST)) 
        .ignoreInvalidEndpoints().parallelProcessing(); 

假設RECIPENT_LIST頭僅包含一個HTTP端點。對於給定的http端點,應按順序處理消息,但可以並行處理針對不同端點的兩個消息。

基本上,我想知道是否有任何措施來提高性能。例如,使用concurrentConsumers會有幫助嗎?

回答

6

SEDA的concurrentConsumers> 1絕對有助於吞吐量,因爲它可以允許多個線程並行運行......但是您需要實現自己的鎖定機制以確保只有一個線程正在打給定的http終點在給定時間

否則,這裏是你的選擇的概述:http://camel.apache.org/parallel-processing-and-ordering.html

總之

,如果你可以使用JMS,那麼可以考慮使用ActiveMQ message groups作爲它的瑣碎使用,是專爲正是這種使用情況(並行處理,但單個線程的消息組等)。