首页 > 代码库 > Camel In Action 阅读笔记 第一章 认识Camel 1.1 Camel 介绍
Camel In Action 阅读笔记 第一章 认识Camel 1.1 Camel 介绍
1.1 Camel 介绍
Camel 是一个为了您的项目集成变得高效有趣的集成框架,Camel 项目在2007年初开始的,相对来说它还比较年轻,但它已然是一个非常成熟的开源项目,它所使用的是Apache 2开源License, 其背后的社区非常强大。
Camel主要目的就是简化集成,当您用心读完本书以后,您会很感谢Camel并把它做为您的一个必需技能。
Apache Camel这个项目之所以命名为Camel的主要原因是因为简单好记,有一个小道说法是项目创建者之一在吸了一个叫"骆驼"牌的香烟后迸发出的灵感。关于名字的由来,Camel 网站的一个FAQ具体说明了为什么会取名为Camel。
1.1.1 Camel到底是什么?
Camel的核心是一个路由引擎(Route Engine),更精确的说应该是一个路由引擎构建器(Route Engine Builder),它可以让您自己定义路由规则,包括从哪接收消息,如何处理以及发到哪去。Camel的集成式语言让您编写出强大精细的路由规则,就像一个业务处理流程。
Camel的一个基本原则是它不关心您要处理什么类型的数据。这是极其重要的一点,对于您或者开发人员来说,这意味着在不用把您的数据类型转换为某一规范格式的情况下,使集成任何系统成为可能。
Camel的高度抽象让您在不同的协议和数据类型的系统之间可以使用相同的API,Camel中的组件(Components)为不同的协议和数据类型做了特定的实现。令人尖叫的是它竟然能支持80多种协议和数据类型[1],它的模块化设计和扩展性可以让您实现自己的Component,这种架构设计省去了不必要的转换工作,而且使得Camel 更快更轻量。所以需要像Camel这样丰富的处理能力的项目,把Camel嵌入进去是个绝佳的选择。例如,其它的开源项目Apache ServiceMix和 ActiveMQ就是使用Camel来做系统集成。
我们再来谈谈Camel 不是什么,Camel 不是一个企业服务总线(Enterprise Service Bus -- ESB),但仍然有些人说它是一个轻量级的ESB因为它能做路由,数据转换,监控,编制业务处理流程等等,但Camel本身没有容器或者一个可靠的消息总线。我们却可以选择把它部署到这样的环境里像Open ESB和刚才提到的ServiceMix。所以我们把它当成一个集成框架而不是一个ESB.
为了更好的了解Camel是什么,我们接下来看看它的主要特性。
1.1.2 为什么要使用Camel?
Camel在集成的领域里有许多新奇的想法,这就是它的创建者们为什么想创建Camel,而不是去使用一个现成的框架。我们会在本书里学习到Camel这些特性,Camel背后的大体思想是:
*路由调解(Mediation)引擎*企业集成模式(EIPs)*领域特定语言(DSL)*可扩展的组件包
*不关心路由的消息内容 *模块化和可插拔的架构设计*POJO 模型 *易于配置
*类型自动转换器 *轻量的核心 *提供测试套件*充满活力的社区
接下来,我们具体看看这些特性:
路由调解引擎
Camel的核心特性是它的路由调解引擎,一个路由引擎可以根据路由规则来选择把消息转发到哪。在Camel的世界里,路由器的路由规则[2]的配置要使用到EIP和DSL,接下来我们会详细介绍。
企业集成模式
虽然企业集成的问题多样化,但Gregor Hohpe和Bobby Woolf 却发现这些问题和解决方案是可以统一归纳的, 他们为此写了一本所有想做集成的人必读的书Enterprise Integration Patterns,如果您还没来得及读,我们建议您先学习它。至少它能帮您更快的理解Camel相关概念。
EIPs很有用不仅仅是因为对于每个集成类的问题都有一个解决方案,它还能帮助您理解问题本身。模式归纳了一些更快解决问题的规律。使用模式和自己徒手去解决问题的区别就像一个是口语交流一个是手语交流。如果您去过国外,您就能感觉到这种差异。
Camel很大程度上是基于EIPs来实现的,虽然EIPs描述了很多集成问题和解决思路,但它只是解决思路。Camel是用一种语言来实现这些思路。EIPs中的模式和Camel DSL差不多是一一对应的关系。
领域特定语言
Camel的DSL为集成领域做出了很大贡献,可能有一些其它的框架也提供了DSL的特性(比如可以例XML来定义路由规则),但不像Camel DSL基于自定义型语言。Camel之所以唯一也是因为它为常用的编程语言提供了DSL,例如Java、Scala、Groovy,同时它也提供XML的形式去描述路由规则。
DSL的目的是让开发人员专注解决集成问题,而不是对某个编程语言的使用。虽然Camel大部分是用Java写的,但是它仍然支持多种语言混合编程。每项语言都有自己的优势,您可能想用不同的语言去做不同的事情。使用Camel可以让您在打造自己的方案时是自由的。下面是不同语言的DSL例子,它们做的都是同样的事情。
*Java DSL
from("file:data/inbox").to("jms:queue:order");
*Spring DSL
from("file:data/inbox").to("jms:queue:order");
*Spring DSL
<route> <from uri="file:data/inbox"/> <to uri="jms:queue:order"/></route>*Scala DSL
from "file:data/inbox" -> "jms:queue:order"这些示例都是真实可运行的代码,它们展示了把data/inbox下的文件转发到JMS Queue order上竟此简单。这些都是在实际编程时使用DSL,您可以使用一些现在的工具来帮助您代码补全、编译错误提示等等,如下图1.1 是Eclipse IDE的代码补全帮您提示有哪些DSL可以使用。
可扩展的组件包
Camel提供了扩展包有80多种Component,这些Component可以让Camel连上不同的transport,或使用不同的API或识别不同的数据类型。
不关心路由的消息内容
Camel可以路由各种形式的消息,绝不仅仅是只有XML格式,在路由的过程中不用把您的内容转换成某一规范格式。
模块化和可插拔的架构设计
Camel的模块化设计可以把任意Component加载到Camel的运行环境中去,而不用考虑这些Component是不是Camel自身提供的,它可以第三方提供的也可以您自定义的。
POJO 模型
在Camel中,Beans(或者POJO)被当做一等公民,Camel力争让您在项目集成中的任何地方任何时间都能使用Beans, 这意味着您可以把Camel的内置功能扩展到您自己的代码中,在本书的第四章中会对Bean在Camel做一个完整的阐述。
易于配置
根据“约定优于配置”(Convention Over Configuration)的原则可以减小配置任务,为了直接把端点(Endpoints)配在路由(Rourte)里,Camel 提供了人性化的配置。
打个比方,您要配一个文件接收器(Consumer)在一个目录下去扫描以.txt结尾的文件(包括子目录),可以做如下配置:
from("file:data/inbox?recursive=true&include=*.txt")...
类型自动转换器
Camel内置的类型转换机制有150多种,比如您不需要去显示的去配置一个类型转换器把字节数组转换成字符串,假如您需要一个转换器是Camel没有的,您需要自己去定义。但是别担心,流行的那些转换器Camel都已经实现了。
轻量的核心
Camel 的核心非常非常轻量,整个包只1.6MB,它仅依赖于Apache Commons Logging 和Fuse Source Commons Management。这足够让您可以把Camel部署或内嵌到任何地方,比如一个standalone的应用,web应用,Spring应用,Java EE应用,JBI容器[3],OSGi Bundle, Java Web Start或者Google App Engine。所以Camel不是被设计成为一台Server或者ESB,而是一个可以被内嵌在任何您想用的平台里。
提供测试套件
为了方便测试您的Camel 程序,Camel提供了测试套件,这个套件Camel自身也在广泛使用,大概有6000多[4]个单元测试用例,测试套件(Test Kit)中包含了测试专用组件,比如它可以Mock真实的Endpoints,同时提供Expectation来判断程序运行是否达到预期效果,是成功还失败。在本书第六章,我们会详细介绍如何测试Camel。
充满活力的社区
富有活力的社区是您计划在您的应用中使用开源软件的必备条件,不活跃的开源项目的社区一般不太行,一旦您遇到问题就只能孤军奋战了。而使用Camel时遇到问题,Camel的使用者和Camel的开发人员都会积极的帮助您。更多关于Camel社区的介绍请参考附录D.
现在您已经浏览了Camel的主要特性,接下来,我们将看一看Camel的安装包并尝试一个简单的例子。
[1] 随着项目的发展,现已经能支持161种协议和数据类型,更精确的数据请参考 https://github.com/apache/camel/tree/master/components
[2] 路由规则可以被为为路由器的定义。
[3]已经没那么流行了
[4] 具体数值还请阅读源代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。