Apache Servicemix 教程 – 介绍及理论

经过一年来ESB学习和工作的部分经验.即给自己总结的时间,把脑海中关于ESB的部分进行整理,也留下点心得,也想和对ESB感兴趣,有研究的朋友进行交流.不足之处望予以批评指正.

基础概念

1. ESB

ESB(Enterprise Service Bus)是为了解决企业生态群落内大量系统间因为交互繁琐导致维护成本增加而产生的.下图是典型的传统多系统间数据交互图.随着生态群落的扩大,越来越多的系统加入,导致维护这些系统的通讯成本越来越多

clip_image002[4]

ESB的诞生就是为了解决上图中的这些问题,下图可以可以看到ESB所解决的实际问题.

clip_image004[4]

2. Apache Servicemix

Apache是著名的开源社区,正对不同应用都有很多对应的开源产品,对开源有兴趣的朋友可以进入官网学习. 对于ESB. Apache主要有2款产品: Synapse 和 Servicemix

  1. Synapse,这款产品是apache早期的一款ESB产品,诞生于JBI规范制定之前,属于众多ESB产品中一个普通的产品,并没有什么太吸引人的地方. 但随着WSO2这款新ESB的兴起,发生了点改变.WSO2是WSO2公司正对Synapse进行二次开发后的产物,因为使用了apache licese因此也开源.并且提供了强大的可视化界面,通过几步简单的配置就能完成系统间接口的集成.
  2. ServiceMix,我们重点讲这款产品.这款产品是目前Apache主推的一款ESB产品,遵循了JBI规范,可以很方便的进行二次扩展,其自带的组件基本能完成一般系统集成的需要,是构建SOA的良好产品.目前Servicemix主要有2个版本在维护,即3.*和4.*两个版本,这里我们讲3.*版本.

3. Apache CXF

目前比较成熟功能比较齐全的webserivce工具.可以用来发布自己的webserice程序,并能作为webserivce的客户端. Servicemix使用cxf作为其webserivce的一个发布工具.

4. Apache Camel

Apache Camel是一个开源的企业应用集成框架。它采用URI来描述各种组件,这样你可以很方便地与各种传输或者消息模块进行交互,比如HTTP、 ActiveMQ、JMS、JBI、SCA、MINA或CXF Bus API。该路由完全参照了《Enterprise Integration Patterns》一书中各种路由模式的规则. Servicemix使用camel作为其核心消息路由器.

5.  Apache derby

Apache一款文件型数据库,可以方便的内嵌到任意程序中去,也可以以内存作为数据库存储.比较适合开发系统初期使用. Servicemix用来对一些NMR消息的记录.

6.  Apache activemq

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

7.  JBI

Sun用来规范ESB领域而制定的一个规范,当然目前遵守这一规范的ESB产品不多,Servicemix算是其中一个良民.
Servicemix从本质上来说就是一个JBI的容器,任何符合JBI规范的组件都可以放到这个容器里,成为Servicemix的一部分.JBI协议是smx里的重点,简单来说JBI协议分为下面几部分.

  1. Bind Component(BC) 即消息绑定组件,用于对不同消息进行转换.把收到的各种消息统一转换为JBI消息.也把JBI消息转换成各种协议发往外部系统.eg:
    servicemix-file                 IO组件,允许对把IO文件传入Servicemix
    servicemix-ftp                 支持FTP协议,允许使用FTP上文件传入Servicemix
    servicemix-http               支持Http协议,允许通过Http接受文件
    servicemix-jms                支持JMS协议,允许接受JMS消息
    servicemix-xmpp             支持XMPP协议,允许实时同步消息
    servicemix-cxfbc             支持WebService,允许接受soap消息,此组件不支持jax-rpc规范
    ……
  2. Server Engine(SE) 即服务引擎,简单来说就是把从BC组件收到的消息进行二次处理,比如路由消息,树结构转换, eg:
    servicemix-bean            允许自定义bean,可以自行对消息进行自定义处理
    servicemix-camel           允许对消息路由处理
    servicemix-jsr181           允许自定义通过代码发布WebService接受soap并处理消息
    servicemix-quartz          消息定时处理
    servicemix-saxon           消息格式转换,支持xslt
    servicemix-script            允许在嵌入动态语言对消息进行处理
    ……
  3. Normalized Message Route(NMR) 即标准消息路由,在JBI规范中,BC收到消息后,不能直接传递给下一个BC或者SE进行消息处理,这些传输必须通过NMR转发,NMR转发的消息已经是标准的JBI消息,Servicemix也支持对soap消息进行NMR传递
  4. Delivery channel 即传输通道,上述NMR消息传输的通道
  5. Service Unit (SU) 即服务单元,用户编写的服务的最小单位,每个服务单元都有自己的逻辑进行处理.例如,消息转换,消息路由,通过一个或多个SU的组合完成一次接口调用
  6. Service Assemblys(SA) 即服务集合,简单来说就是把SU大包成SA文件,然后部署到Servicemix中去

先写到这,以后继续补充,ESB设计到太多的J2EE知识,几乎涵盖了J2EE所有特征.

2 条评论。

  1. 你好,可方便告诉我你的即时通讯方式,想和你交流esb相关的问题,谢谢@

  2. 我想学习 servicemix,能不能给点建议啊