第 21 章 启用可靠的消息传递
摘要
Apache CXF 支持 WS-可靠消息传递(WS-RM)。本章论述了如何在 Apache CXF 中启用和配置 WS-RM。
21.1. WS-RM 简介
概述
WS-可靠Messaging (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 源重新传输尚未收到确认的消息。
第一个重新传输尝试会在基本重新传输间隔后进行。默认情况下,连续重新传输尝试会按指数避退间隔,或者以固定间隔进行。如需了解更多详细信息,请参阅 第 21.5 节 “配置 WS-RM”。
这整个过程对请求和响应消息都进行对称;即,在响应消息的情况下,服务器充当 RM 源,客户端充当 RM 目的地。
WS-RM 交付保证
WS-RM 可在分布式环境中保证可靠的消息交付,无论使用的传输协议如何。如果无法可靠交付,则源或目的地端点会记录错误。
支持的规格
Apache CXF 支持以下 WS-RM 规格版本:
- WS-ReliableMessaging 1.0
(默认) Corresp onds 到 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-寻址版本中的第一个版本(这是 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-ReliableMessaging 的每个版本并对其做出相应的响应。
- 客户端
- 在客户端一端,WS-RM 版本由您在客户端配置中使用的命名空间(请参阅 第 21.5 节 “配置 WS-RM”)或者在运行时覆盖 WS-RM 版本(请参阅 第 21.4 节 “运行时控制”)。