首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >回到基础: Apache路由和直接组件

回到基础: Apache路由和直接组件
EN

Stack Overflow用户
提问于 2013-05-02 06:40:21
回答 1查看 6.6K关注 0票数 4

我有点困惑于骆驼路线及其两个终点:直接和塞达。假设我有一条这样的路线:

代码语言:javascript
复制
public void configure()
{
 from("direct:services")
  .process(//Some processing here)
  .to("http://ThirdPartyServers")
}

最重要的是,我有一个rest web服务,它接收多个请求,进行一些处理,然后将消息交给这个路由,以便从一些第三方服务器获得响应。我通过Spring框架实例化了Camel上下文,如下所示:

代码语言:javascript
复制
<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组件有新的疑问。让我说我的路线是这样的:

代码语言:javascript
复制
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条消息?这意味着最终所有的消息都会被一个一个地处理?

EN

Stack Overflow用户

发布于 2013-05-02 07:03:54

直接组件在调用方的线程中运行。简化后,它是一个常规的java方法调用。只要多个线程正在调用直接端点,多条消息就可以在路由中运行。

当调用SEDA (或VM)端点时,您的消息将被放入队列(内存中)。另一个线程(在路由中)一个接一个地从队列中选择消息并对它们进行处理。您可以通过设置concurrentConsumers选项来配置seda使用者应该拥有多少线程。默认情况下,使用一个线程的消息确保每次只处理一条消息,而不管该路由产生多少线程。

归根结底是你的陈述

在一瞬间,我向这个路由发送了多个不同的消息。

如果这意味着不同的线程,或者仅仅是序列中的单个线程,

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16331886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档