Apache Camel 学习 使用05

时间:2024-04-06 16:55:58

Apache Camel - 21 -将Camel嵌入到Spring应用中

Apache Camel 学习 使用05

Apache Camel 学习 使用05

使用Java DSL 代替 Spring XML DSL

使用Spring XML DSL 并不是强制的,也可以使用Java DSL 代替。

Apache Camel 学习 使用05

Apache Camel 学习 使用05

将fileRoutes以Bean的方式注入到camelContext上下文中。

当然,可以在camelContext中使用多个routeBuilder(路由)

 

自动扫描包下的RouteBuilders

(还是上面的工程结构)

如果在同一个包中定义了许多RouteBuilder,Camel可以使用扫描该包并实例化它找到的所有路由

先看下applicationContext.xml中的配置:

Apache Camel 学习 使用05

直接配置扫描com.server.routes下的所有路由

Apache Camel - 22

Camel控制路由的启动/关闭顺序

控制路由启动和关闭

当集成逻辑直接依赖于其他路由的路由组成时,重要的是它们以在交换开始流动之前可用的依赖性的方式启动。

如果没有,您可能会看到抛出此类异常:

org.apache.camel.CamelExchangeException:端点上没有可用的消费者:端点[direct://someMissingEndpoint]

Camel提供了一种机制来定义启动和关闭的顺序,同时解决这两个问题。

此配方将向您展示如何控制路线的启动和关闭顺序。

个人理解就是:

多个路由互相依赖,在程序启动/关闭的时候,如果不控制其启动顺序,那么它们可能会出现异常信息。

可能由于一个端点初始化、关闭时间较长,导致其他依赖它的端点取不到数据,而抛出异常信息

Apache Camel 学习 使用05

Apache Camel 学习 使用05

可以控制路由顺序

当路由关闭时,首先关闭端点消费者,并且允许在路由本身关闭之前完成流经该路由的任何消息(“in-flight”)。 在300秒超时后,任何保留在飞行中的消息都将被丢弃。

可以在Camel上下文的关联ShutdownStrategy上配置超时。

Apache Camel - 23 - Content Based Routing基于内容的路由

Apache Camel 学习 使用05

Apache Camel 学习 使用05

Apache Camel 学习 使用05

请注意:

我们开始使用choice() - 这告诉Camel以下行将包含一些判断条件。

每种when()方法具体需要判断的条件,类似于Java中if核心。

该方法otherwise()定义了当先前when()条件均不符合时要执行的操作。

该块以.endChoice()结尾

Apache Camel 学习 使用05

Apache Camel 学习 使用05

Apache Camel 学习 使用05

Apache Camel - 24   动态控制路由的启动和关闭

Apache Camel 学习 使用05

Apache Camel 学习 使用05

Apache Camel 学习 使用05

动态控制Apache Camel路由

我们可以通过CamelContext对象中的startRoute()和stopRoute()方法控制路由的启动和停止

 

Apache Camel 学习 使用05

        /**
         * 第三个路由(设置route id、设置禁止自动启动)
         */
        from("jetty:http://127.0.0.1:8282/test-route-contro3").routeId("test-route-control-03").autoStartup(false).process(new Processor() {

Apache Camel 学习 使用05

禁止路由自动启动,由Master路由对它进行控制

Apache Camel 学习 使用05

Apache Camel 学习 使用05

Apache Camel 学习 使用05

Master路由,camelContext成员变量,指向DynamicControlRoutesMainApp.camelContext。

Master路由,单独发布一个Master Http服务,通过调用这个http服务,来控制slave路由的开启、停止、暂停。