我有点困惑于骆驼路线及其两个终点:直接和塞达。假设我有一条这样的路线:
public void configure()
{
from("direct:services")
.process(//Some processing here)
.to("http://ThirdPartyServers")
}最重要的是,我有一个rest web服务,它接收多个请求,进行一些处理,然后将消息交给这个路由,以便从一些第三方服务器获得响应。我通过Spring框架实例化了Camel上下文,如下所示:
<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>现在的问题是,我在瞬间向这个路由发送了多个不同的消息。现在Camel文档说直接组件是在单线程中调用的,并且是同步的。那么,所有的消息都是并发处理还是一个接一个地进行处理呢?
另外,如果我将直接组件改为seda,会有什么不同吗?
提亚
更新后佩特的答案:虽然佩特的答案已经澄清,但我对相同的直接和Seda组件有新的疑问。让我说我的路线是这样的:
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条消息?这意味着最终所有的消息都会被一个一个地处理?
发布于 2013-05-02 07:03:54
直接组件在调用方的线程中运行。简化后,它是一个常规的java方法调用。只要多个线程正在调用直接端点,多条消息就可以在路由中运行。
当调用SEDA (或VM)端点时,您的消息将被放入队列(内存中)。另一个线程(在路由中)一个接一个地从队列中选择消息并对它们进行处理。您可以通过设置concurrentConsumers选项来配置seda使用者应该拥有多少线程。默认情况下,使用一个线程的消息确保每次只处理一条消息,而不管该路由产生多少线程。
归根结底是你的陈述
在一瞬间,我向这个路由发送了多个不同的消息。
如果这意味着不同的线程,或者仅仅是序列中的单个线程,
https://stackoverflow.com/questions/16331886
复制相似问题