当前Mule的最新版本是3.7,其中在3.7版本出现了很多大的变动,特别是http组件和datamapper组件,还有就是SOAP消息组件。这也导致网上很多关于用mule esb来实现简单的SOAP WebService代理服务的例子都无法正常运行。
上图是一个简单的WebService代理服务的实现例子
1. 拖入Http Connector组件,配置基本的path和端口信息。这里没有太特别的地方。
2. 拖入CXF组件,设置为Proxy Service类型,在Advance地方要引入已经导入到项目中的wsdl文件。
--设置该组件的namespace,端口号信息,SOAP类型改为1.2 payload类型为envelope
3. 拖入CXF组件,设置为Proxy Client类型,该组件本身不需要在做任何额外的配置。
4. 拖入http组件,注意是放在process里面,自动即为一个http Request组件,处理SOAP请求转发
--设置host信息,本地的话为0.0.0.0,path信息,访问ws的路径信息,method类型为post
处理完以上配置后一个ws代理就可以完全跑通,并可以通过soapui进行测试。
在proxy代理服务的实现过程中,尝试了以前版本的通过spring的wsproxyService组件,通过http简单请求转发,通过webservice comsumer组件配合cxf组件来实现代理,以上方式均没有尝试通过。
在整个mule esb的功能测试中,整体感觉是mule当前在http消息流的处理上相对优秀,包括http消息流和FTP,SOAP,Database,外部Java代码,MQ集成等,这些访问都能够很好的进行处理。但是如果是单纯的SOAP服务的发布和设计,SOAP+DB的组合实现起来相对麻烦,有很多Talend ESB很容易实现的场景当前在Mule ESB中仍然没有跑通。对于Mule ESB除了最简单的代理服务场景外,还测试了如下场景:
a. 通过http请求然后转发去调用SOAP Webservice
该场景测试OK,对于http请求如果是json格式,还可以将json样例数据导入后形成dataSense的shema结构,该结构可以和WebService consumer的xsd结构进行dataMapping。处理请求相对方便。
b. 通过http请求然后触发数据库查询操作
该场景测试OK,特别是对于http请求的输入参数,可以在Database组件中进行参数化查询和配置。对于Database本身的输出信息也是Datasense的,即可以获取到具体的schema信息方便后续处理。
c. http请求到file文件的处理:测试OK,场景也很简单。
d. 直接在mule环境里面开发一个soap webservice并发布。
该场景OK,对于简单的webserice我们可以直接编写相关的接口类和实现类,并在CXF组件中配置实现。对于较为复杂的结构,可以采用ws-service类型,同时将外部的wsdl文件导入后自动生成CXF相关的结构和代理类。具体的实现即可以通过java代码实现。
在该场景测试中注意自动生成没有实现类,要通过cxf框架命令行生成后再导入。其次就是在cxf组件后面需要拖入一个java组件,该java组件的class配置为刚才的接口实现类。
整体来说mule esb仍然是一款优秀的开源ESB产品,当前主要有社区版和企业版,对于企业版在管控和高可用性上面提供了更多的支持。mule当前在中国没有设置办事处,对于在国内的推广仍然缓慢。如果是更多基于http消费和调用来进行业务和数据的集成,特别是类似open api开放平台的构建,采用mule esb讲是很不错的一个解决方案。而对于soap服务集成,DB集成能力相对来说talend ESB更加强大。