`
jnn
  • 浏览: 287622 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Camel中的几个重要概念之Routes, RouteBuilders 和 Java DSL

阅读更多

Route

一个route就是将一个输入队列中获得的消息,通过一步一步地设置好的逻辑判断(例如过滤器和路由规则)到达一个目标队列中(如果有的话)。Camel为应用开发者提供了两种途径来定义这些路由规则。一个是通过XML来定义路由信息,有关这部分的内容不会在本文档中讨论。另一种方式就是通过Camel所谓的Java DSL(domain-specific language) 来定义。

Introduction to Java DSL

对于许多人来说,要实现一个“domain-specific language” (面向领域的语言)涉及到了一个能够处理这个特定领域语言的关键字以及语法的编译器或者是解释器。对于Camel来说,它没有这么做。在Camel文档中一直都在使用的“Java DSL”而不是 “DSL” ,其目的就是想避免混淆这两个概念。Camel中的“Java DSL”是一个可以像DSL一样被使用的类库,除此之外它还使用了大量Java的语义。你可以看一下下面的例子,在例子下面的备注里, 解释了这个例子的中所用的组件。

Example of Camel's "Java DSL"
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        from("queue:a").filter(header("foo").isEqualTo("bar")).to("queue:b");
        from("queue:c").choice()
                .when(header("foo").isEqualTo("bar")).to("queue:d")
                .when(header("foo").isEqualTo("cheese")).to("queue:e")
                .otherwise().to("queue:f");
    }
};
CamelContext myCamelContext = new DefaultCamelContext();
myCamelContext.addRoutes(builder);

上面例子的第一行创建一个一个RouteBuilder的匿名类的实例,这个匿名类需要实现 configure()方法。
camelContext.addRoutes(RouterBuilder builder) 方法中调用了builder.setContext(this)方法,这样RouteBuilder对象就获得了与之对应的CamelContext的,然后调用builder.configure()方法。在configure方法中,可以调用例如 from(), filter(), choice(), when(),isEqualTo(), otherwise()以及to() 方法。
RouteBuilder.from(String uri) 方法会调用与之对应的CamelContext的getEndpoint(uri)方法来获得指定的Endpoint,并用一个FromBuilder包装这个Endpoint。这样 FromBuilder.filter(Predicate predicate) 方法就会创建一个在header("foo").isEqualTo("bar")这个表达式基础创建的Predicate(所谓的条件)创建一个FilterProcessor对象。就这样, 通过定义这些操作我们逐渐构建出了一个Route对象(使用RouterBuilder进行包装的)并且将这个Route对象添加进了与RouteBuilder所关联的CamelContext中。

Critique of Java DSL

在camel的在线文档中比较了Java DSL与建立在XML基础上的Spring配置文件的在配置routes和endpoint方法优势。特别是Java DSL比 XML 来说要精简很多。还有需要指出的是,现在很多集成开发环境都提供了一个自动补全的功能, 当然这种功能可以编写Java DSL的过程中使用,这也可以大大降低开发者编写Java DSL的难度。

当然在Camel的文档中还忽略了一些内容,就是通过一个解析器来处理存放在外部的DSL。当前Camel并没有提供这也的解析器,并且我也不知道Camel的开发维护人员是否打算做这样一个解析器。我像这个DSL解析器应该提供一个比当前Java DSL更大的一个好处。这个DSL可以通过巴柯斯范式来定义语法,这样Camel的用户可以通过阅读巴柯斯范式来获取书写DSL的知识,而不是像现在需要花费大量的时间通过阅读RouterBuilder类的API来获取。

分享到:
评论
1 楼 baso4233 2013-08-29  
学习了。

相关推荐

    Apache Camel中文开发使用指南.zip

    这个"Apache Camel 开发使用指南中文版"压缩包文件很可能是为初学者和有经验的开发者准备的一份详细教程,帮助他们理解和掌握Apache Camel的核心概念和实际应用。 在学习Apache Camel时,首先要理解的是它的核心...

    camel-java-http

    3. **Camel路由**:学习如何使用Java DSL或XML DSL定义Camel路由,以及如何在Java代码中启动和停止路由。 4. **Camel测试**:了解如何编写和执行Camel路由的测试,确保HTTP通信的正确性。 5. **Maven项目结构**:...

    Camel服务集成,服务编排操作文档

    在Camel中,这可以通过使用DSL(Domain Specific Language)来完成,例如Java DSL或XML DSL。开发者可以定义数据如何在不同服务之间流动,控制流程中的错误处理和事务管理。 4. **Camel Flow** Camel Flow 是Camel...

    Camel in action(camel实战)

    Apache Camel 是一个强大的 Java 框架,它使得开发者能够轻松地实现企业级集成模式。通过简洁而强大的领域特定语言(DSL),开发者可以像拼接乐高积木一样将集成逻辑无缝嵌入到应用程序中。Apache Camel 支持超过 80...

    Camel in action PDF和源代码

    书中通过实际案例,展示了如何配置和管理路由,如何利用Camel的DSL(Domain Specific Language)进行编程,如Java、XML和Groovy DSL。此外,还涵盖了高级主题,如Spring集成、测试策略和性能优化。 源代码文件...

    Java_Apache Camel Spring Boot示例.zip

    Java_Apache Camel Spring Boot示例是一个综合性的项目,展示了如何在Spring Boot应用程序中集成Apache Camel框架。Apache Camel是一个流行的开源框架,它简化了企业级集成(EIP,Enterprise Integration Patterns)...

    ApacheCamel-JDBC

    在"Apache Camel-JDBC"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **Apache Camel 概述**: Apache Camel 提供了一个丰富的组件库,涵盖了各种协议和数据格式,如HTTP、FTP、JMS、MQTT、XML和JSON等。...

    camel-cxf调用和发布webservice例子

    用camel-cxf调用webservice和发布一个webservice接口例子,首先启动QueryServiceMain主函数启动webservice接口,然后启动测试类TestWebservice。例子主要是实现java代码实现camel调用webservice接口

    camel-manual-2.8.0

    根据给定文件的信息,我们可以深入探讨Apache Camel 2.8.0版本中涵盖的关键知识点,这一版本是Apache Camel集成框架的重要里程碑,它基于已知的企业集成模式(Enterprise Integration Patterns),并具备强大的Bean...

    Java_Apache Camel示例.zip

    在这个"Java_Apache Camel示例.zip"压缩包中,包含了一个说明文件和一个主示例项目。 1. **Apache Camel 概述** Apache Camel 允许开发者通过预定义的组件(如HTTP、FTP、JMS、MQTT等)连接各种系统和服务。它的...

    该组件现在在Camel2.19.0中可用_Java_Makefile_下载.zip

    然后,他们可以在自己的Camel应用中引用这个组件,通过Camel的XML或Java DSL配置路由,以利用OPC UA功能。 5. **持续集成/持续部署(CI/CD)**:对于这样的项目,持续集成和持续部署流程至关重要,确保每次代码更改都...

    camel in action@

    Apache Camel是一个流行的开源Java库,它提供了强大的路由和消息转换功能,使得在分布式系统中处理数据和实现组件间的通信变得更加简单。 本书深入浅出地介绍了Camel的核心概念,包括路由规则(DSL)、组件、数据...

    [Camel实战].(Camel.in.Action).Claus.Ibsen&Jonathan;.Anstey.文字版

    ### Apache Camel 实战知识点概述 #### 一、Apache Camel 简介 - **定义**:Apache Camel 是一个强大的开源框架...书中不仅提供了丰富的理论知识,还有大量的实践案例和代码示例,是学习Camel不可或缺的经典教材之一。

    apache-camel-3.7.0_数据同步_

    在标题“apache-camel-3.7.0_数据同步_”中提到的“数据同步”,是指利用Apache Camel实现不同系统、数据库或应用程序间的数据交换和一致性维护。在描述中,“数据同步Data synchronization”进一步强调了这个功能的...

    camel 手册

    - **灵活的配置方式**:用户可以通过 Java 基于域特定语言(Domain Specific Language, DSL)或 Fluent API 的方式,通过 Spring 基于 XML 的配置文件,或者 Scala DSL 来创建路由和中介规则。这种方式使得在 IDE 中...

    apache camel java

    在Java开发环境中,Apache Camel特别受欢迎,因为它允许开发者使用纯Java代码来定义路由规则,同时也支持大量的API和DSL(领域特定语言)。 Camel 提供了一个叫做“组件”(Components)的概念,这些组件代表了与...

    利用Camel调用远程对象

    标题中提到的“利用Camel调用远程对象”主要涉及到两个关键概念:Camel的路由(Route)和远程调用(Remote Invocation)。路由是Camel的核心概念,它定义了数据从输入端点到输出端点的传输路径。而远程调用则是指在...

    camel-manual-2.4.0, 用户手册

    作为一个小型库,Apache Camel 拥有最少的依赖项,这使得其可以轻松地嵌入到任何 Java 应用程序中。此外,无论使用哪种传输方式,都可以使用相同的 API,这意味着一旦学会了 API 的使用,就能够与所有组件进行交互。...

    ApacheCamel-Timer

    Timer 组件是 Apache Camel 中的一个重要部分,它提供了定时触发事件的功能,类似于 Java 中的 javax.swing.Timer 或者 Quartz Scheduler。 在 Apache Camel 中,Timer 组件主要用于创建周期性的事件源,这些事件...

Global site tag (gtag.js) - Google Analytics