基于Apache Camel的EIP集成

jopen 9年前

Apache Camel十一个Java库和引擎,有多种不同的整合模式,然而他并不是BPMN或者ESB,虽然可以在此引擎下实现他们。Apache Camel是一个编程人员调节、整合问题的工具。其核心架构如上图,我们看到的是一些不同的相互链接的构件,而在他们中间起链接作用的粘合剂就是Camel Context了。他将实体链接一起,有的时候被称为Camel运行是容器。

Apache Camel是一个轻量级的集成框架,它实现了所有EIP。因此,您可以使用EIP所需的图案容易地集成不同的应用。您可以使用Java,Spring的XML,scala或Groovy。几乎每一个技术,你可以想像是可用的,例如HTTP,FTP,JMS,EJB,JPA,RMI,JMS,JMX,LDAP的Netty,和很多很多(当然大多数ESB还提供了对他们的支持)。此外,自定义的组件可以很容易地被创建。

您可以部署Apache的骆驼作为独立的应用程序,在Web容器(如Tomcat或Jetty),在JEE应用服务器(如JBoss应用服务器或WebSphere AS),在OSGi环境或与Spring容器组合。

当Camel和其它开源的组件包括OSGI,Maven,Karaf,CXF,ActiveMQ,DataBaseAPI,JMS结合后,即可以实现当前企业应用集成的大部分集成场景。对于当前开源ESB,Apache ServiceMix本身也是基于Camel来实现的一个集成服务总线,其底层核心能力仍然是Camel和ActiveMQ,同时通过Karaf和OSGI来实现了组件化的服务架构。而当前已经商用的redhat JBOSS Fuse也是基于Camel的一个商用化实现,并通过JBOSS Developer Edition来增加了可视化的设计和编排功能。

对于Camel我们最关心的还是在哪些集成场景下能够使用的问题,因此我们从集成场景来分析具体可能使用到Camel的地方。首先分析集成场景,再来分析Camel的其它一些扩展能力。

Ftp文件集成的场景 : 该场景可以应用到文件集成,即将文件从某一个FTP或目录,传输到一个目标FTP目录上。基于Camel本身的配置,可以实现对目录监听的频率,文件筛选过滤等各种关键属性的配置。

消息集成场景: 该场景核心是基于ActiveMQ集成来实现,即可以将Camel接受到的各种输入的信息,包括在接收输入过程中产生的事件都发送消息到MQ存储。我们可以再增加一个读取消息的独立配置组件,来从MQ中读取消息。当然我们还可以增加路由和判断功能后,将MQ接收到的消息根据路由规则分发到再下一层的二级MQ消息队列中。

消息的输入:可以是Http Request, WS,FTP,JMS,MQ等多种方式。

消息的输出:可以是文件,Log日志,DB数据库,下游MQ,HttpResponse等多种形式。

Camel通过和ActiveMQ的集成,基本可以实现传统消息中间件的核心功能,包括基于消息的异步集成,基于消息的发布订阅机制等。通过通过ActiveMQ也可以很好的来实现在服务集成过程中的日志管理能力。

Http集成: Camel可以集成Http的能力,其中一方面是可以将Http请求做为输入进行后续处理。一方面是对于原生的Http请求服务,可以通过Camel进行Http服务请求的代理。在实现Http请求代理的过程中我们可以增加处理组件对Http请求的内容进行加工,映射和内容丰富等。

WS服务集成: 对于WS服务的集成重点是通过Camel和CXF框架的集成来实现。其中既可以对常规的Java API接口发布为标准的Web service服务。也可以对已有的WS服务进行Proxy服务代理,同时在进行服务代理的过程中增加对服务输入内容的处理,数据映射和内容丰富,对服务请求内容进行Log处理等。

数据库集成能力: 可以看到在Camel的整体集成框架里面既可以通过传统的JDBC同数据库集成,也可以通过Hibernate, iBatis等框架实现和数据库的集成。在和DB的集成中,一方面是读取DB中的数据,一方面是讲输入的请求通过SQL语句更新或写入到DB数据库表中。这些都可以通过Camel配置文件来实现。

对DB集成和传统的ETL最大的区别就在于Camel的DB集成更加容易将Http,WS和DB数据库操作能力整合起来。即通过Http或WS服务请求调用来触发对DB的读取和数据插入操作。这种集成方式将比传统的ETL数据集成更加灵活和方便。

除了以上核心集成能力外,可以看到Camel本身还提供的在集成过程中的扩展能力

  • 调度任务:支持该能力,可以将配置的集成组件配置为定时周期性的调度任务进行处理。
  • 日志能力:支持,可以对在集成过程中的消息输入,输出等进行Log日志记录。
  • 数据映射:支持,支持在camel配置过程中消息输入和输出之间的数据映射和转换。
  • 路由能力:支持,路由可以使用过滤器、多播、接收列表、并行处理来定义,从而变得非常灵活。
  • 热插拔:支持,本身基于OSGI框架和Karaf来实现了组件化容器和集成组件的热部署和管理。
  • 异常处理:支持,可以处理在消息集成过程中的异常,并对异常进行管理和Log记录

可以看到Camel本身已经具备ESB总线的底层核心能力,这也正是开源的ServiceMix基于Camel来实现的基础。同时由于本身基于OSGI和组件化架构,我们可以很容易的根据集成场景和实际集成需求对Camel进行扩展。对于Camel本身集成的性能当前还没做过详细的性能测试,暂时不进行描述。

对于Camel本身支持的EIP集成模式,可以参考 http://camel.apache.org/enterprise-integration-patterns.html 的详细描述。对于用户手册下载可访问: http://camel.apache.org/manual.html

来自: http://blog.sina.com.cn/s/blog_493a84550102vzgs.html