第 21 章 启用可靠消息
摘要
Apache CXF 支持 WS-可靠消息传递(WS-RM)。本章论述了如何在 Apache CXF 中启用和配置 WS-RM。
21.1. WS-RM 简介
概述
WS-ReliableMessaging(WS-RM)是一种保证在分布式环境中可靠地传输消息的协议。它可让消息在软件、系统或网络故障的分布式应用程序之间可靠地交付。
例如,可以使用 WS-RM 来确保在网络上以正确方式传送正确的消息。
WS-RM 的工作原理
WS-RM 确保在来源和目的地端点之间可靠传递消息。源是消息的初始发送者,目的地是最终接收器,如 图 21.1 “Web 服务可靠消息” 所示。
图 21.1. Web 服务可靠消息
可以描述 WS-RM 消息的流,如下所示:
-
RM 源会向 RM 目标发送
CreateSequence
协议消息。它包含接收确认的端点的引用(wsrm:AcksTo
端点)。 -
RM 目标将
CreateSequenceResponse
协议消息发回到 RM 源。此消息包含 RM 序列会话的序列 ID。 -
RM 源为应用程序源发送的每个消息添加一个 RM
Sequence
标头。此标头包含序列 ID 和唯一的消息 ID。 - RM 源会将每个消息传输到 RM 目的地。
-
RM 目标通过发送包含 RM
SequenceAcknowledgement
标头的消息,确认来自 RM 源的收据。 - RM 目的地以精确的方式向应用目的地传递消息。
RM 源重新传输一个尚未收到确认的消息。
第一个重新传输尝试是在基本重新传输间隔后进行的。默认情况下,以 exponential-off 间隔或以固定间隔形式进行重新传输尝试。如需了解更多详细信息,请参阅 第 21.5 节 “配置 WS-RM”。
整个过程会针对请求和响应消息进行对称进行的。也就是说,当响应消息时,服务器充当 RM 源,客户端充当 RM 目的地。
WS-RM 交付保证
WS-RM 可保证分布式环境中可靠的消息发送,无论所使用的传输协议如何。如果无法进行可靠交付,则源或目标端点会记录错误。
支持的规格
Apache CXF 支持 WS-RM 规范的以下版本:
- WS-ReliableMessaging 1.0
(默认) Correspon ds 到 2005 年 2 月提交版本,现已过期。然而,出于向后兼容性的原因,这个版本被用作默认值。
WS-RM 版本 1.0 使用以下命名空间:
http://schemas.xmlsoap.org/ws/2005/02/rm/
此版本的 WS-RM 可与以下 WS-Addressing 版本一起使用:
http://schemas.xmlsoap.org/ws/2004/08/addressing (default) http://www.w3.org/2005/08/addressing
为了遵守 2005 年 2 月版本的 WS-RM,您很难使用第一个 WS-Addressing 版本(这是 Apache CXF 中的默认设置)。但大多数其他 Web 服务实施已切换到较新的 WS-Addressing 规格,因此 Apache CXF 允许您选择 WS-A 版本以促进互操作性(请参阅 第 21.4 节 “运行时控制”)。
- WS-ReliableMessaging 1.1/1.2
对应于官方 1.1/1.2 Web 服务可靠消息 规范。
WS-RM 版本 1.1 和 1.2 版本使用以下命名空间:
http://docs.oasis-open.org/ws-rx/wsrm/200702
WS-RM 的 1.1 和 1.2 版本使用以下 WS-Addressing 版本:
http://www.w3.org/2005/08/addressing
选择 WS-RM 版本
您可以选择要使用的 WS-RM 规格版本,如下所示:
- 服务器端
- 在供应商方面,Apache CXF 适应了客户端使用哪个版本的 WS-回复和相应的响应。
- 客户端
- 在客户端客户端上,WS-RM 版本由您在客户端配置中使用的命名空间决定(请参阅 第 21.5 节 “配置 WS-RM”),或在运行时覆盖 WS-RM 版本,使用运行时控制选项(请参阅 第 21.4 节 “运行时控制”)。