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 本身还提供的在集成过程中的扩展能力
可以看到 Camel 本身已经具备ESB总线的底层核心能力,这也正是开源的ServiceMix基于 Camel 来实现的基础。同时由于本身基于OSGI和组件化架构,我们可以很容易的根据集成 场景 和实际集成需求对 Camel 进行扩展。对于 Camel 本身集成的性能当前还没做过详细的性能测试,暂时不进行描述。
对于 Camel 本身支持的EIP集成模式,可以参考 http://camel.apache.org/enterprise-integration-patterns.html 的详细描述。对于用户手册下载可访问: http://camel.apache.org/manual.html
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