Mule ESB 2.0 苦斗两周之后的初印象? 与Mule 2.0抵死缠绵了两周,喜忧掺半。但只在2.0之后,Mule才算真正站到
Mule ESB 2.0 苦斗两周之后的初印象
? 与Mule 2.0抵死缠绵了两周,喜忧掺半。但只在2.0之后,Mule才算真正站到了ESB的起跑线上。
?
? 完整的笔记见我的Wiki: http://wiki.springside.org.cn/display/calvin/Mule , 这里主要列一下实际的升级感受。
???? 《Open-Source ESBs in Action》作者文章

1. 很Spring,很SCA的配置文件
全Spring又全nameSpace化的配置文件,简洁而规范,在IDE中有良好的提示。 尤其是transport相关的endpoint的改进明显,原来的URI<endpoint address="pop3://bob:secret@localhost:62002"> 或如下的connector<!----><connector?name="SystemStreamConnector"?className="org.mule.providers.stream.SystemStreamConnector">
<properties>
<property?name="promptMessage"?value="Please?enter?something:?"/>
<property?name="messageDelayTime"?value="1000"/>
</properties>
</connector>
?
??????????? 改为transport特定的namespace后,IDE中清晰显示了可选的配置项。
<!----><stdio:connector?name="SystemStreamConnector"?promptMessage="Please?enter?something:?"messageDelayTime="1000"/>
?
SCA的Service/Component概念。 Service/Component代替了原来注定要被遗忘的MuleDescriptor,其中Component定义业务逻辑的POJO,Service定义如何以服务的方式管理组件的配置。
在POJO中调用远程服务的Nested Router也改为了很SCA的Binding。
Component也有Component 与 PooledComponent的选项。完整的例子如下:<!----><pooled-component>
<spring-object?bean="mySpringPojo"/>
<binding?interface="org.mule.example.loanbroker.credit.CreditAgencyService">
<outbound-endpoint?ref="CreditAgency"/>
</binding>
<pooling-profile?exhaustedAction="WHEN_EXHAUSTED_FAIL"?initialisationPolicy="INITIALISE_ALL"
??????maxActive="1"?maxIdle="2"maxWait="3"/>
</pooled-component>
?
?????上文按pooling-profile定义的pooled-component,在spring中定义mySpringPojo,并将一个远程的CXFEndpoint binding到POJO的CreditAgencyService变量中,可直接调用;
可视化拖拽的Eclipse 插件Mule IDE。 虽然还非常原始,但总算有个盼头。2. 架构的更改
Web Service支持增强
随着CXF作者的加入,Web Service这事实上SOA里最重要的Transport得到了加强,WSDL终于可以通过annotation准确配置。
虽然无奈,就冲这个理由就应该升级到2.0了。不是2.0太好,而是1.4太差了。?REST支持增强
?,支持apache abdera(Atom Publish协议实现),Jersey(JSR131 RESTful WebService实现)和Restlet 三种Transport。代码结构的合理化
抽象出相对稳定的org.mule.api接口包,代替原来的org.mule.umo包。
开发团队还检查调整了Mule中所有对象的定义,使其更加准确。各个模块的升级
如核心MuleManager大对象拆成MuleContext and Registry,运行时Reistry支持动态加载Service,支持向OSGI进军;
如以流的方式转换处理消息。
如SEDA模型定义的细化,见后。工具增强
? SOA治理工具(开源), ?消息流监控工具,? 底层监控工具。
不过还没试用不知道实际效果如何。
3.
遗憾的地方:性能下降
无论是代替XFire的CXF还是Mule 2.0,都拖得性能大大下降。
用一个简单例子测试,Mule 1.4+XFire? : Mule 1.4 + CXF : Mule 2.0 + CXF 的每秒事务数对比是15000:10000:8000。
仍然没有自带的?,负载均衡,流量控制实现。
不像BEA、ServiceMix都使用JMS的底层,Mule使用vm queue在单一JVM的节点间流动。
我们团队主要用TerraCotta?在集群里同步状态数据,流量控制与负载均衡也是自己实现。CXF transport 仍然使用Mule自己实现的Http Connector。
CXF Standlone也是用Jetty的,看tomcat们努力的劲头,相信谁都能随便实现一个不错的Http Connector。从1.4升到2.0非常的花时间。
估计团队重构的太兴奋了,从代码到配置文件再到XFire to CXF,一些代码级修改还没文档详述。文档从1.4版更新到2.0版的进度太慢,而且文档仍然简略。质量仍然需要在使用中检验。
文档说2.0版本的比1.x版本增加了30%的单元测试用例,按理来说项目质量应该提高了。
但还是被我发现了在很重要的AbstractEntryPointResolver类里,居然有内存泄漏,原因是用没有重载Object的equals()函数的StringBuffer作为HashMap的key,结果map永远都在增大。
这说明了,开源项目的质量,最终是靠一个积极使用和反馈的用户群和一个活跃的开发团队,"用"出来的。
1 楼 fujohnwang 2008-07-04 引用这说明了,开源项目的质量,最终是靠一个积极使用和反馈的用户群和一个活跃的开发团队,"用"出来的。
开源项目需要商业团队的“进一步”打造才能为客户创造价值,呵呵 2 楼 HenryYu 2008-07-07 最近也在开发ESB产品,主要是解决企业各个系统之间点对点的紧耦合,通信阻塞等问题。对Mule的机制一下研究,吸收了不少东西。 3 楼 melin 2008-07-07 lz能评价一下ServiceMix和mule? 4 楼 江南白衣 2008-07-09 没有用过ServiceMix,不过因为ServiceMix头上JBI的头衔而不大喜欢。 5 楼 melin 2008-07-09 我是因为ServiceMix基于osgi的微内核,才喜欢的。 6 楼 江南白衣 2008-07-09 mule也快osgi了。2.1版就是,在svn分支里已经可以看到相关代码。 7 楼 fuyuzsl 2008-07-22 请问一下mule 2中如果在使用http接入的话,我的http页面中包含有上传的一个文件
使用mule2 的transformer 怎么能获得上传的文件! 8 楼 fuyuzsl 2008-07-22 使用mule 2 中的MuleClient 的send 或者dispathch方法使用传输muleMessage
使用的transport是http ,可是设置message的payload为file,在transformer那里却无法获得该文件
9 楼 fuyuzsl 2008-07-22 如果可以能不能给个例子,谢谢
邮箱地址是zsljxq@163.com 10 楼 fuyuzsl 2008-08-01 mule 2 中muleMessage 的addAttachement() 使用http 做transport 到transformer 那里总是ContentLengthInputStream ,假若,现在attachement是一个DataHandler,不知道为什么总是到transformer那里就没有datahandler,请指教! 11 楼 ljxml 2008-08-04 请教白衣 以前使用UMOContainerContext.getComponent(String) 现在使用那个方法 读取spring context中配置的bena
感觉Mule2.0文档完善的地方还不少 12 楼 江南白衣 2008-08-04 ljxml 写道请教白衣 以前使用UMOContainerContext.getComponent(String) 现在使用那个方法 读取spring context中配置的bena
感觉Mule2.0文档完善的地方还不少
现在需要先拿到Registry,再从里面拿Bean,我也不知道自己的做法是不是最正规的,没文档啊.....
13 楼 black_zerg 2008-08-06 搞esb用来干嘛的?要做ibm的项目? 14 楼 ljxml 2008-08-15 Yeah 本身提供一个静态方法
RegistryContext.getOrCreateRegistry(); 15 楼 john813 2008-09-27 江南白衣,惊然发现您用到terracotta了,能谈谈对它的使用感受吗? 本人对此技术非常感兴趣,有心想用,但不太敢。先谢过了。
--
刚看过您关于terracotta的帖子。想知道在项目中的使用感受,比如用terracotta和SNA(Share Nothing Architect)相比的好处、要付出的代价(相比SNA)。以及同JBossCach这类产品在应用场景上的对比。真是有很多问题,一时想不起来怎么问。您就想那说那吧。
--
比如一个具体问题是,如果把pojo存储在一个TC服务器网格中,相信TC会把该pojo在网格的所有节点中同步。但其是否有一种机制可以使该pojo同它的持久存储(比如数据库)同步?而且最好是对应用层透明? 如果有,TC能否保证pojo在TC中的更新和同数据库的同步是事务性的 ?
--
感觉引入terracotta会对系统架构产生重大影响。基于jvm的cluster、纯pojo的缓冲、这样我们可以用廉价的linux box堆积出一个jvm网格... terracotta给我们描述的场景很诱人,您怎么看 ? 16 楼 江南白衣 2008-09-28 hehe,关于TC,你可以问问huihoo的程勇,他现在准备接TC在国内的技术支持。 17 楼 john813 2008-09-28 江南白衣 写道hehe,关于TC,你可以问问huihoo的程勇,他现在准备接TC在国内的技术支持。请问哪里能联系到他?国内有讨论TC的论坛吗 ?
18 楼 xiaObaiRabbit 2008-10-08 偶像 因为第一家公司就用springside1.0M3版本