2013-05-02 77 views
4

我對駱駝路由及其兩個端點有點困惑:Direct和Seda。好吧,讓我們說,我有這樣的路線:這條線路回到基礎:Apache駱駝路由和直接組件

public void configure() 
{ 
from("direct:services") 
    .process(//Some processing here) 
    .to("http://ThirdPartyServers") 
} 

在此我有一個接收幾個請求REST Web服務,上面做了一些處理,然後雙手在消息得到一些第三響應派對服務器。我已經實例化駱駝上下文通過Spring框架是這樣的:

<camelContext id="appCamelContext" xmlns="http://camel.apache.org/schema/spring" 
     trace="true" streamCache="true"> 
     <propertyPlaceholder id="properties" 
      location="classpath:camel.properties" /> 
     <camel:routeBuilder ref="oneRouteBuilder" /> 
     <camel:routeBuilder ref="photosRouteBuilder" /> 
</camelContext> 

現在的問題是,在一個瞬間我發送多個不同的消息,這條路線。現在駱駝文檔說直接組件是在單線程中調用的並且是同步的。那麼所有的信息會被同時處理還是一個接一個的處理呢?

此外,如果我改變直接組件seda,它會有什麼區別?

TIA

更新[皮特的回答後]: 雖然皮特的回答澄清,但我有一個關於同一個直接和塞達組件新的疑問。比方說,現在我的路線是這樣的:

public void configure(){ 
from("direct:services") 
.choice() 
.when("some predicate here-Predicate1") 
.to("seda:predicate1") 
.otherwise() 
.to("seda:fallback") 
.end(); 

from("seda:predicate1") 
.process("some processing") 
.to("http://ThirdPartyServers"); 

from("seda:fallback") 
.process("some processing") 
.to("jms:fallbackqueue"); 
} 

現在,如果我發送5封郵件到直流分量從不同的線程,所以這些消息將被同時處理。正如你在上面的路由中看到的,直接組件將消息發送到seda組件。那麼現在只有一個seda組件的線程可以處理所有不同的5個消息?最終意味着所有的消息將被逐一處理?

+0

在駱駝郵件列表中提問時也有這個問題:http://camel.465427.n5.nabble.com/Back-to-Basics-Apache-Camel-Routes-and-Direct-Component-td5731899.html – Sikorski 2013-05-02 09:41:19

回答

4

direct組件在調用者的線程中運行。簡化,它是一個常規的Java方法調用。只要多個線程正在呼叫直接端點,多條消息就可以通過路由運行。

當調用SEDA(或VM)端點時,您的消息被放入隊列中(在內存中)。另一個線程(在路由中)逐個從隊列中選擇消息並處理它們。您可以通過設置concurrentConsumers選項來配置seda使用者應該擁有多少線程。默認情況下,消費消息的一個線程確保一次只處理一條消息,而不管該線程有多少個線程正在生成。

它歸結爲你的發言

在一瞬間,我發送多個不同的消息,這條路線

如果這意味着不同的線程,或序列只是從一條單線,