2013-05-02 84 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使用者应该拥有多少线程。默认情况下,消费消息的一个线程确保一次只处理一条消息,而不管该线程有多少个线程正在生成。

它归结为你的发言

在一瞬间,我发送多个不同的消息,这条路线

如果这意味着不同的线程,或序列只是从一条单线,