Web服务可靠消息传输简介(六)

日期: 2007-12-25 作者:Paul Fremantle翻译:罗小平 来源:TechTarget中国

  “我能从WSRM得到什么层级的可靠性呢?”回答这个问题并不容易。WSRM其实是一个连线协议,而非应用级端对端协议。之所以这样设计,主要出于两个考虑。第一,Web服务标准(WS-*)一般都不针对实现层设计,这是为了提升其松散耦合能力。第二,要提供端对端的可靠性,就必须有某种与应用相关联的事务管理器。而事务管理功能,是由别的WS-*规范支持的,实现方法也有多种,因此对于WSRM来说,如此做意义就不大了。

  WSRM自身提供的可靠性保证,其实就是要求消息能从RMS到RMD成功传输,且RMD予以确认。就“确认”而言,不同的实现可能又有不同的含义。比如Apache Sandesha2,这是一个开源的WSRM实现,它有一个插件式的存储管理器。在这个实现中,只有消息被持久化到磁盘后才会发出确认消息。也就是说,Sandesha 允许服务器宕机与重启。WSO2 Tungsten服务器支持这种操作模型。

  WSRM 1.0规范对传输过程做了很多加固工作,如AtLeastOnce、AtMostOnce、ExactlyOnce和InOrder。不过,这些保障措施都是用于RMD与应用之间,而非连线上的。因此在1.1规范中,我们删除了这些部分。这些保障当然仍要提供,但应该是在实现层而非连线协议的责任。

  编程模型

  如果你从事消息处理工作,那么通常会学习一些为实现可靠传输的编程模型(PM),如JMS。WSRM或许会让你大吃一惊——它不要求任何新的PM。当然各厂商的具体实现可能有所不同,但WSRM核心规范,是不依赖于任何特定PM的。比如Sandesha允许用户自定义RM。如果没有序列,它会自动创建;不再需要发送消息时,它会自动超时并结束序列。换句话说,RMS和RMD不过是整个消息处理流程中的处理器(Handler),没有队列等等需要用户硬编码配置的可见实体,RM可以和现有Web服务共享同样的URI。因此,WSRM可以在不写任何代码的前提下与已有的Web服务集成。

  当然,我们也可以从编码角度做一些有意义的思考。现在不少Web服务协议栈和API,如Microsoft WCF (Indigo)、JAX-WS和Apache Axis2都支持非阻塞异步调用Web服务。在这种模型里,客户端通过回调实现对消息的处理。

  非阻塞异步模型对于WSRM非常重要。试想,如果Web应用阻塞调用其他Web服务,当请求并发数趋高时,应用的线程池就可能耗尽,无法再处理其他请求。

  1.0规范以来的修订历史

  WSRM的首次发布时间是2003年3月。2005年6月,1.0规范提交到OASIS。此次草案对1.0规范做了很多修改,主要包括以下各项:

  名字空间变化。因为修改较大,1.1规范与1.0不直接兼容,为突出OASIS的所有权,不少名字空间做了调整。

  规范清理。技术委员会对规范做了细致梳理,发现了很多小问题,并做了相应清理工作。

  增加了CloseSequence。上面已经讨论过,某些情况下,必须对序列做显式关闭。
  删除了LastMessage。1.0规范要求对最后一条消息作出标识,其实是多余的。
  安全功能得到加强。1.0规范与WS-Security/WS-SecureConversation紧密耦合,1.1规范在这方面增加了灵活性,还支持基于SSL/TLS的安全机制。
  采用W3C推荐的WS-Addressing。

  简化了WSRM-Policy。老版规范中包含大量定时参数,无法动态调整,新版规范予以删除,或移入CreateSequence。
  支持双向可靠传输条件下的防火墙穿越,即引入了MakeConnection。

  规范的实现

  WSRM 1.0规范的实现很多,如Microsoft WCF(以前叫作Indigo)、Apache Sandesha2等等。OASIS WSRX技术委员会以2006年初的最后版草案为基础,展开了各个实现版本的兼容工作,随后有五家公司参与。尽管结果并不理想,只有三家公司实现了兼容。不过委员会还将在此次公开预览版基础上,再次推动此项工作,希望能有更多公司参与进来。

  总结

  在本文中,还有很多复杂应用没有讲到,有兴趣的朋友,请直接阅读规范。文章的最后,我想结合我自己的经验和一些用户的意见,对WSRM的应用做一个总结:

  B2B可靠消息传输。很多人都看到了WSRM在B2B市场的潜力。不少企业都在寻找低成本的、安全的与合作伙伴传递采购、票务信息的技术。WSRM是一个理想的选择。

  部门与部门间,或服务器与服务器间的通讯。WSRM在企业内部信息传递上也大有可为。越来越多的公司开发并使用基于Web服务和XML的通讯工具,而WSRM恰是在其中保证可靠性的关键技术。

  替代JMS。Windows的下一个版本Vista将内置WSRM,这为那些希望用WSRM替换JMS的企业提供了契机。

  JMS桥接器。你还可以将WSRM作为独立协议,用于实现对多个不同JMS实现的桥接。Apache Synapse开源项目就是这样一个产品。

  基于浏览器的消息传输。AJAX的应用日益广泛,在浏览器间直接实现消息传输的想法是很吸引人的。到目前为止,已经有人在为Firefox中实现基于SOAP的AJAX模型而努力。RM恰恰能在其中贡献力量,因为AJAX的非阻塞异步传输模式与WSRM非常般配,更何况WSRM的MakeConnection还可以帮助穿越防火墙。再如实现浏览器中信息订阅(浏览器发出一个订阅请求,利用MakeConnection就可以收到多个回应),也很有前途。

  总之,我相信WSRM前景广阔。尽管还需要一些时间,才能让所有公司、技术牵起手来同心协力,但我们正在为这个目标努力奋斗,此次的公众预览版,无疑就是一个重要里程碑。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐