Apache Camel - 21 -将Camel嵌入到Spring应用中
使用Java DSL 代替 Spring XML DSL
使用Spring XML DSL 并不是强制的,也可以使用Java DSL 代替。
将fileRoutes以Bean的方式注入到camelContext上下文中。
当然,可以在camelContext中使用多个routeBuilder(路由)
自动扫描包下的RouteBuilders
(还是上面的工程结构)
如果在同一个包中定义了许多RouteBuilder,Camel可以使用扫描该包并实例化它找到的所有路由
先看下applicationContext.xml中的配置:
直接配置扫描com.server.routes下的所有路由
Apache Camel - 22
Camel控制路由的启动/关闭顺序
控制路由启动和关闭
当集成逻辑直接依赖于其他路由的路由组成时,重要的是它们以在交换开始流动之前可用的依赖性的方式启动。
如果没有,您可能会看到抛出此类异常:
org.apache.camel.CamelExchangeException:端点上没有可用的消费者:端点[direct://someMissingEndpoint]
Camel提供了一种机制来定义启动和关闭的顺序,同时解决这两个问题。
此配方将向您展示如何控制路线的启动和关闭顺序。
个人理解就是:
多个路由互相依赖,在程序启动/关闭的时候,如果不控制其启动顺序,那么它们可能会出现异常信息。
可能由于一个端点初始化、关闭时间较长,导致其他依赖它的端点取不到数据,而抛出异常信息
可以控制路由顺序
当路由关闭时,首先关闭端点消费者,并且允许在路由本身关闭之前完成流经该路由的任何消息(“in-flight”)。 在300秒超时后,任何保留在飞行中的消息都将被丢弃。
可以在Camel上下文的关联ShutdownStrategy上配置超时。
Apache Camel - 23 - Content Based Routing基于内容的路由
请注意:
我们开始使用choice() - 这告诉Camel以下行将包含一些判断条件。
每种when()方法具体需要判断的条件,类似于Java中if核心。
该方法otherwise()定义了当先前when()条件均不符合时要执行的操作。
该块以.endChoice()结尾
Apache Camel - 24 动态控制路由的启动和关闭
动态控制Apache Camel路由
我们可以通过CamelContext对象中的startRoute()和stopRoute()方法控制路由的启动和停止
/**
* 第三个路由(设置route id、设置禁止自动启动)
*/
from("jetty:http://127.0.0.1:8282/test-route-contro3").routeId("test-route-control-03").autoStartup(false).process(new Processor() {
禁止路由自动启动,由Master路由对它进行控制
Master路由,camelContext成员变量,指向DynamicControlRoutesMainApp.camelContext。
Master路由,单独发布一个Master Http服务,通过调用这个http服务,来控制slave路由的开启、停止、暂停。