第 1 章 为路由定义构建块
摘要
Apache Camel 支持两个替代 域特定语言 (DSL)来定义路由:Java DSL 和 Spring XML DSL。定义路由的基本构建块是 端点 和 处理器,其中处理器的行为通常由表达式或逻辑 predicates 修改。Apache Camel 可让您使用各种不同语言定义表达式和 predicates。
1.1. 实施 RouteBuilder 类
概述
要使用 域特定语言 (DSL),您可以扩展 RouteBuilder
类并覆盖其 configure()
方法(您定义路由规则)。
您可以根据需要定义多个 RouteBuilder
类。每个类都会实例化一次,并在 CamelContext
对象中注册。通常,每个 RouteBuilder
对象的生命周期由您在其中部署路由器的容器自动管理。
RouteBuilder 类
作为路由器开发人员,您的核心任务是实施一个或多个 RouteBuilder
类。您可以从继承两种替代 RouteBuilder
类:
-
org.apache.camel.builder.RouteBuilder
时间为适用于 部署到任何 容器类型的通用RouteBuilder
基础类。它在camel-core
工件中提供。 -
org.apache.camel.spring.SpringRouteBuilder
abrt-abrt这个基础类特别适用于 Spring 容器。特别是,它提供对以下 Spring 特定功能的额外支持:在 Spring registry 中查找BeanRef()
Java DSL 命令,以及事务(请参阅 交易指南 )。它在camel-spring
工件中提供。
RouteBuilder
类定义用于启动路由规则的方法(例如,来自()、拦截器
()
和 exception()
)。
实施 RouteBuilder
例 1.1 “RouteBuilder 类的实现” 显示最小的 RouteBuilder
实施。configure()
方法正文包含路由规则;每个规则都是单个 Java 语句。
例 1.1. RouteBuilder 类的实现
import org.apache.camel.builder.RouteBuilder; public class MyRouteBuilder extends RouteBuilder { public void configure() { // Define routing rules here: from("file:src/data?noop=true").to("file:target/messages"); // More rules can be included, in you like. // ... } }
来自URL1.to(URL2)
的规则形式指示路由器从目录 src/data
读取文件,并将它们发送到目录 目标/消息
。选项 ?noop=true
指示路由器保留(而不是删除) src/data
目录中的源文件。
当您将 contextScan
与 Spring 或 Blueprint 搭配使用以过滤 RouteBuilder
类时,默认情况下,Apache Camel 将查找 singleton Bean。但是,您可以打开旧行为,使其包含使用新选项 includeNonSingletons
的模型范围。