2014-01-29 28 views
2

我想要做的是提高路線的速度,這意味着我想實現更多的路線每秒執行。我怎樣才能使Apache Camel路線更快?

我可以在單獨的線程上同時運行我正在運行的100條路線中的一些嗎?如果是這樣,我該怎麼做?

我運行這樣一個簡單的路線和收集的開始和結束主循環時間:

import java.util.Calendar; 

import org.apache.camel.CamelContext; 
import org.apache.camel.Exchange; 
import org.apache.camel.builder.AdviceWithRouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 

public class TestAdviceRoute extends AdviceWithRouteBuilder { 


    @Override 
    public void configure() throws Exception { 
     from("direct:start") 
     .routeId("Doug") 
     .process(new PrintProcessor()) 
     .end() 
     ; 
     } 
    } 

    @SuppressWarnings("deprecation") 
    public static void main(String[] args) throws Exception{ 
     CamelContext context = new DefaultCamelContext(); 
     System.out.println("Start Time:" + Calendar.getInstance().getTime()); 
     for (int i = 0; i < 100; i++) { 
      context.addRoutes(new TestAdviceRoute()); 
      context.getRouteDefinition("Doug").adviceWith(context, new WrapRoute()); 

      context.createProducerTemplate().sendBody("direct:start", "Doug"); 
      context.stop(); 
     } 
     System.out.println("End Time:" + Calendar.getInstance().getTime()); 
    } 

} 

注:我已經簽出Apache Camel - AsyncProcessing,但我不覺得這非常有助於提高單一路線的速度。然而,當試圖同時運行兩條不同的路線時,它確實減少了時間。

+0

這個問題是waaay開放式結束。擁有多條路線將消耗多個資源。你需要做的是分析你的路線,看看大部分時間花在哪裏,然後應用縮放技術。例如,使用線程池通過拆分器EIP拆分和流式傳輸大型CSV文件。這是過早的優化。 – Namphibian

+0

http://camel.apache.org/seda.html – vikingsteve

回答

4

你肯定會做一些壞事和奇怪的事情。

一些指針

  1. 只應停止駱駝背景一次,而不必在每個循環。
  2. 創建生產者模板一次並重新使用它
  3. 爲什麼你要告知路由?這樣做會導致路線重新啓動。不確定你的觀點。
  4. 直接組件用於同步直接方法調用。

如果您希望更多線程處理來自單個路由的消息,則可以將seda與併發使用者一起使用。

+1

謝謝!我會執行你的建議。 –