java camel,java – 返回基础知识:Apache Camel路由和直接组件

我对Camel路线及其两个端点感到困惑:Direct和Seda.好吧,假设我有这样的路线:

public void configure()

{

from("direct:services")

.process(//Some processing here)

.to("http://ThirdPartyServers")

}

除此之外,我有一个休息Web服务,它接收几个请求,进行一些处理,然后将消息移交给此路由以获得来自某些第三方服务器的响应.我通过Spring框架实例化了Camel Context,如下所示:

trace="true" streamCache="true">

location="classpath:camel.properties" />

现在的问题是,我立即向这条路线发送了多条不同的消息.现在Camel文档说直接组件在单线程中调用并且是同步的.那么所有的消息会同时处理还是一个接一个的处理会发生?

此外,如果我将直接组件更改为seda,它会有任何区别吗?

TIA

更新[在Petter的回答之后]:

尽管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条消息,那么这些消息将同时处理.正如您在上面的路由中看到的那样,direct组件将消息发送到seda组件.那么现在只有一个seda组件的线程将处理所有不同的5条消息?最后的含义是什么消息将被逐一处理?

解决方法:

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

在调用SEDA(或VM)端点时,您将消息放入队列(在内存中).另一个线程(在路由中)逐个从队列中选择消息并处理它们.您可以通过设置concurrentConsumers选项来配置seda使用者应具有的线程数.默认情况下,消耗一条消息的消息确保无论有多少线程生成此路由,一次只能处理一条消息.

它归结为你的陈述

in a instant I send multiple different messages to this route

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

标签:java,spring,apache-camel

来源: https://codeday.me/bug/20190625/1284567.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值