camel 路由跳转组件使用

常用的是以下组件,并且一下组件是可以做消费者的同时还可以作为生成者

一、vm 

首先这个组件是异步并且是跨camelContext的,使用方式如下:

 from("vm:bar?concurrentConsumers=5")
注意以上的使用方式带有一个   concurrentConsumers=5 的参数,这个参数非常重要,建议使用这个组件的时候,都记得设置,这是应为vm的生成者和消费者并不是在同个线程内的,他们的通讯中间隔了一个BlockingQueue也就是消费者是从这个blockingQueue中取消息消费的,concurrentConsumers=5的意思是有5个线程准备着可以同时消费,如果不设置的话,当同时访问量高一点并且消费处理时间久,很容易出现大量的一下错误:

org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 30000 millis. Exchange[HttpMessage@0x630b92a6]
        at org.apache.camel.component.seda.SedaProducer.process(SedaProducer.java:144)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[169:org.apache.camel.camel-core:2.15.2]
        at org.apache.camel.component.jetty.CamelContinuationServlet.service(CamelContinuationServlet.java:162)[344:org.apache.camel.camel-jetty-common:2.15.2]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)[96:org.apache.geronimo.specs.geronimo-servlet_3.0_spec:1.0.0]
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)[101:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1496)[101:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v2015

就是说一个线程已经处理不过来了,所以要设置 concurrentConsumers参数,所以这里建议如果没有异步要求,可以直接使用direct-vm这个组件,就不会出现以上错误。

好了,当我们配置好的时候,发现,to到这个vm的时候,并没有出现异步的作用,我们还是要等待vm处理完才继续能往下面的路由跑,例如:

		<route>
		   <from uri="direct-vm"/>
		   <to uri="vm:bb"/><!-- 如果这样设置,要等待bb这个路由处理完,才能继续执行cc路由,这并不是我们想要的 -->
		   <to uri="vm:cc"/>
		</route>

所以我们要在vm那里设置一个参数 waitForTaskToComplete=Never 这样就有异步的效果

<to uri="vm:bb?<span style="font-family: monospace; font-size: 14px; line-height: 24px;">waitForTaskToComplete=Never</span>"/>

详细参数可以参考官网:
http://camel.apache.org/seda.html

二、direct-vm

这个组件是我们目前比较常用,同步且跨camelContext,就是说消费者与生产者中间没有隔了个 blockingQueue,是在同一线程中

三、seda

这个组件是异步不跨camelContext的,用法与vm一样

四、direct

这个是同步且不跨 camelContext的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值