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服务规范和应用特定的恶协议一同使用来构建完整的消息解决方案。