serviceMix是一个广泛使用的开源ESB,适合SOA项目的集成,它的消息基础设施使用嵌入的ActiveMQ,消息路由Camel,同时支持 WEB服务和RESTful
ServiceMix的核心是一个OSGI容器,OSGI是负责加载和运行动态软件模块,一个OSGI bundle 是一个普通的java jar文件,包含OSGI元数据信息,有关jar中类和资源信息
ServiceMix中OSGI的运行容器是 Apache Karaf,提供部署OSGI动态配置,集中式日志系统,远程通过JMX管理系统和可用于管理的控制台,使用Karaf能够管理模块的全部生命周期
不仅支持 OSGI bundles 也支持普通java的.jar文件,xml,spring xml和war文件。
ServiceMix部署这些开源项目是基于Karaf OSGI之上的out-of-the box方式,ActiveMQ和Camel注册Shell命令道Karaf,这样它能管理嵌入的JMS中间件和Camel运行环境,
也可以根据项目需要定制这些功能,
总结:
1. Karaf。 这个部分主要的目的是实现模块的pnp。 遵照OSGi标准的bundle,就可以使用这个功能,实现独立的安装和更新,不需要重启整个系统。
2. Camel。 整个部分是实现消息路由的。 通过它,可以指定消息如何在系统的各个模块之间互相流转。 好处是不需要把收发消息的具体方式,硬编码到功能模块中。
3. ActiveMQ。 这个是提供一种标准的消息通道实现。 我理解它是Camel的功能实现的组成部分。 但是感觉也可以不要它。
4. cxf: 这个是提供一个webservice的标准接口。 设想一个系统,最终还是需要提供某种Service的。而目前的趋势是WebService占主流。 所以servicemix采用它提供对webservice的支持。
简单的使用和需要注意:
1.ServiceMix有热部署机制,会把deploy问文件下的jar包自动部署为bundle,,如果自己写的东西需要下线,只是把deploy的jar包删掉是没有用的(jar包已经被打成bundle放在cache文寄件)
里面了,必须使用bundle:uninstall<那个生成的号>,命令卸载掉你的jar包
2.serviceMix正常启动后,active的bundle数和已经安装的bundle数必须一致,否则实际上启动失败,可以尝试解压到其他位置
3.部署到ServiceMix,由于这里使用了http协议,需要先安装camel-http插件,否则直接部署会报错: feature:install camel-http
部署命令:
(1) osgi:install , 例如:osgi:install -s file:ProjectDir/target/foo-1.0-SNAPSHOT.jar
(2) osgi:list ,查看已经安装的Bundle。
(3) osgi:uninstall 181 , Uninstall Bundle 181.
(4) osgi:resolve 181 , 解析Bundle181的依赖是否满足。
(5) osgi:start 181 182 183 , 启动三个Bundle.
(6) osgi:stop 181 182 183 , 停止三个Bundle.
(7) osgi:restart 181 182 183 , 重启三个Bundle.
(8) karaf@root> log:display 查看日志