WS-ReliableMessaging

WS-ReliableMessaging描述了一种协议，在出现软件组件，系统或网络故障时，使得SOAP消息能够在分布式应用间能够可靠传送。

2003年3月，BEA Systems, 微软, IBM, TIBCO软件公司共同撰写了最初的规范，在随后的两年里进行改进。2005年6月，2005年3月的版本于被提交到OASIS的Web服务可靠交换(WS-RX)技术委员会，2007年6月14日，被批准成为OASIS标准，2009年2月2日，1.2版本被批准。

在WS-ReliableMessaging之前，OASIS曾提出过一个竞争的规范(WS-Reliability)，该规范为富士通，日立，NEC，甲骨文公司，Progress Software和昇陽電腦所支持。这些支持者中的大多数现在也支持WS-ReliableMessaging规范。

可靠消息模型 

源应用想在一个不可靠的基础设施上可靠地发送消息给目标应用。想要实现这一点，应用需要使用可靠消息源和可靠消息目标。源应用发消息给可靠的消息源。可靠的消息源使用WS-ReliableMessaging (WS-RM)协议来传送消息到可靠的消息目标。可靠的消息目标再将消息递交给目的应用。如果可靠的消息源因故无法传送消息到可靠的消息目标，它必须抛出一个异常或者其他方法标识该消息没有被传送出去。源应用和可靠的消息源可能实现在同一进程中或是不同的组件。类似的，目标应用和可靠的消息目标可能在一个进程中或不同的组件。

需要注意的是，WS-RM规范仅处理消息在线上传输的内容和行为。消息如何从源应用发送到可靠消息源，消息如何从可靠消息目标递送到目标服务，消息是在内存中存储，还是持久化在硬盘上，等等，这些考虑都不在WS-RM规范的范围内。

WS-RM协议定义和支持了集中递送保障，包括：
 至少一次（AtLeastOnce） - 每一条消息将被递送到目标应用至少一次。如果一条消息无法被递送，可靠消息源或可靠消息目标至少有一个应当报错。例如，目标应用可能得到重复的信息。
 至多一次（AtMostOnce） - 每一条消息将被递送到目标应用不超过一次。消息可以没有被递送到目标应用，但目标应用决不能收到重复的消息。
 正好一次（ExactlyOnce） - 每一条消息将被递送到应用一次且仅一次。如果消息无法被递送，可靠消息源或可靠消息目标至少有一个应当报错。目标应用将不会受到重复的消息。
 按序（InOrder） - 消息将按照从源应用发送到可靠消息源的顺序，从可靠消息目标被递送到目标应用。这一保障包括了以上所有保障。

可组合的架构 
WS-ReliableMessaging使用SOAP和WSDL的可扩展性模型。WS-ReliableMessaging并没有定义一个完整的消息解决方案的所有特性。WS-ReliableMessaging是一块积木，与其他Web服务规范和应用特定的恶协议一同使用来构建完整的消息解决方案。

批评 
这篇文章 解释为什么可靠性不需要消息层提供，而是需要业务层提供。

WS-ReliableMessaging的实现 
 Apache Sandesha
 WebLogic Server
 IBM WebSphere
 GlassFish
 SAP NetWeaver
 微软Windows Communication Foundation

参见
 Web服务
 WS-Reliability

外部链接
 WS-ReliableMessaging 1.1 OASIS规范 
 WS-ReliableMessaging 200502版本 
 关于WS-ReliableMessaging的一些真相
 Web服务可靠消息传输简介 

ReliableMessaging