第 21 章 启用可靠的消息传递
摘要
Apache CXF 支持 WS-Reliable Messaging (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 源重新传输了尚未收到确认的消息。
在基础重新传输间隔后进行第一次重新传输尝试。默认情况下,会进行连续重新传输尝试,以指数避退间隔,或者以固定间隔为固定间隔。如需了解更多详细信息,请参阅 第 21.5 节 “配置 WS-RM”。
此整个进程对请求和响应消息都是对称的;也就是说,如果响应消息,服务器将充当 RM 源,客户端则充当 RM 目的地。
WS-RM 交付保证
WS-RM 保证在分布式环境中提供可靠的消息,无论使用的传输协议是什么。如果无法保证提供可靠,则源或目标端点会记录错误。
支持的规格
Apache CXF 支持以下 WS-RM 规范版本:
- WS-ReliableMessaging 1.0
(默认) 从 2011 年 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
严格说,为了遵守 WS-RM 的 2 月 5 日提交版本,您完全不建议使用这些 WS 寻址版本(这是 Apache CXF 中的默认设置)。但是大多数其他 Web 服务实现已切换到最新的 WS 寻址规范,因此 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 节 “运行时控制”)。