Apache Camel 学习 使用05

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路由的开启、停止、暂停。

发布了365 篇原创文章 · 获赞 2 · 访问量 7413

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/104727843