Servicemix,Karaf和Camel
Servicemix是一个基于JBI规范的ESB,从Servicemix4开始全面支持OSGI,所谓全面支持是指不仅Servicemix4本身是基于OSGI framework和OSGI Bundle来实现,而且在Servicemix4上跑的应用也是由OSGI Bundle来构成的。而目前有很多J2EE应用服务器本身是基于OSGI来实现,但在这些应用服务器上跑的应用则是传统架构的。
Servicemix(以下我们讨论的Servicemix均指Servicemix4)是由集成了多个开源项目的“综合性”项目,主要包括Karaf、Camel、ActiveMQ等等。
其中Karaf是Servicemix的核心,Karaf是一个OSGI的运行时平台,其它的几个项目都是在Karaf的平台上运行的。实际上,Karaf最初就是从Servicemix项目中,将内核部分分离出来成为一个独立的Apache开源项目的。但Karaf不是一个OSGI framework,它需要真正的OSGI framework(例如Felix、Equinox等)的支撑,才能运作,通过集成这些OSGI framework,Karaf具有OSGI framework的功能,而且在这个提供了:
Logging:日志服务
Console:Shell控制台和Web控制台
Deployer & Provisionning:提供一些必要的运行时支撑库,可支持Bundle的fileinstall、OBR、features等应用热部署功能。
Admin:提供动态配置管理、操作系统集成、Karaf实例管理、Bundle生命周期管理等等管理功能。
JAAS-based Security Framework:基于JAAS的安全认证框架。
Blueprint:对象和服务的依赖注入框架(通过集成Aries Blueprint Container实现)。
... ...
很多直接基于OSGI framework来运行应用的OSGI初学者都因为要实现以上基础功能而感觉入门门槛极高。所以,Karaf实际上是将一些OSGI应用所需的一些基础性的功能实现了,供上层应用使用。它大大降低了运行OSGI应用的入门门槛。
接着就是Camel项目了。Camel是一个强大的集成框架,它是EIP(Enterprise Integration Pattern企业集成模式)的一个具体实现框架。Camel可以支持用基于Java API、blueprint(或spring)、Scala DSL等方式来实现各种传输协议或消息的路由,充当这些协议或消息的交换媒介。说白点,就是负责这些不同的协议和消息之间的转换和路由工作,使两个支持不同协议的组件能够互相通讯,互相调用对方提供的服务,而这些正是ESB实现多系统间集成的核心。
Camel可以支持的协议几乎是无限的,例如:HTTP、CXF based Web Service、CXF based RESTful Web Service、Socket、JMS、FTP、Mail(smtp/pop3/imap)、RMI、SNMP、LDAP... ...。Camel是以URI的方式来统一对各种协议的支持。对每种协议,都开发了相应的Component。在Camel里,Component的概念就相当于一个支持解析和处理一种协议的实例的工厂,它在实际使用时,会产生相应的endpoint,endpoint就是这个解析和处理协议的实例,在Camel里,用URI的方式来代表这个endpoint。所以,我们可以在Camel的应用代码里看到各种各样的URI,例如:
jms:topic:stock-price mina:tcp://211.122.134.121:8100 pop3://username@210.11.123.25:110 rmi://localhost:3161/ServiceBean?remoteInterfaces=com.p.Service