当前位置: 首页 > 知识库问答 >
问题:

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

谭浩皛
2023-03-14

我对骆驼路线和它的两个终点有点困惑:直接和SEDA。假设我有一条这样的路线:

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组件。假设我的路线是这样的:

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");
}

现在,如果我从不同的线程向direct组件发送5条消息,那么这些消息将被并发处理。正如您在上面的路由中所看到的,direct组件将消息发送到seda组件。那么现在是否只有一个seda组件线程来处理所有不同的5个消息?意思是最后所有的信息都会被一个一个地处理?

共有1个答案

舒枫涟
2023-03-14

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

当调用SEDA(或VM)endpoint时,您的消息被放在队列(内存中)中。另一个线程(在路由中)逐个从队列中挑选消息并进行处理。您可以通过设置concurrentConsumers选项来配置seda使用者应该有多少线程。默认情况下,一个线程消耗消息确保一次只处理一条消息,不管有多少个线程产生到这条路由。

这可以归结为你的陈述

 类似资料:
  • Routing refers to determining how an application responds to a client request to a particular endpoint, which is a URI (or path) and a specific HTTP request method (GET, POST, and so on). Each route c

  • 本文向大家介绍asp.net-mvc 路由基础,包括了asp.net-mvc 路由基础的使用技巧和注意事项,需要的朋友参考一下 示例 当您yourSite/Home/Index通过浏览器请求url时,路由模块会将请求定向到class的Indexaction方法HomeController。如何知道将请求发送到此特定类的特定方法?出现了RouteTable。 每个应用程序都有一个路由表,在其中存储路

  • 路由配置是一组指令,用来告诉 router 如何匹配 URL以及匹配后如何执行代码。我们来通过一个简单的例子解释一下如何编写路由配置。 import React from 'react' import { render } from 'react-dom' import { Router, Route, Link } from 'react-router' const App = React.cr

  • 我正在尝试在我的nginx服务器上设置vue路由器。我遇到的问题是,如果我直接在浏览器中输入url,我的路线就不起作用。 我尝试了vue路由器文档中描述的服务器配置,以及建议的堆栈溢出类似配置。我当前的nginx位置配置如下: 所做的就是将任何路径重定向到我的根组件(path:),而不是。这确实有意义,并且似乎只重定向到索引文件。我如何重定向直接链接的到路由在我的VueJS应用程序? 以下是我的v

  • 我正在使用管理面板开发Laravel 5.0 Web应用程序。我正面临一个问题与路线。我有如下分组管理路线, 事情进展顺利。我可以毫无问题地使用跟随, 但是我想 显示登录页面或重定向到 所以我把第一组改成了第二组, 现在当我访问 我在chrome上看到“这个网页有一个重定向循环”。在路线组中可能吗?如果没有,如何使用.htaccess执行此操作? 更新 下面是中间件的方法。它只会更改身份验证的基础

  • Route路由 自定义路由 {#1自定义路由} 动态参数绑定 {#2动态参数绑定} restful API 风格 {#3restful-api-风格} <?php return array( 'homepage'=>[ 'pattern' => '/', 'controller' => 'Web:Home:Default:index'