我对骆驼路线及其两个端点有点困惑:Direct 和 Seda。好吧,假设我有一条这样的路线:
public void configure()
{
from("direct:services")
.process(//Some processing here)
.to("http://ThirdPartyServers")
}
除此之外,我有一个休息 Web 服务,它接收多个请求,进行一些处理,然后将消息移交给此路由以从某些第三方服务器获取响应。我已经通过 Spring 框架实例化了 Camel Context,如下所示:
<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,会有什么不同吗?
TIA
更新[在彼得回答之后]:
虽然 Petter 的答案已经澄清,但我对相同的 Direct 和 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 条消息?意思是最后所有的消息都会被一一处理吗?