第 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 消息的流,如下所示:

  1. RM 源会向 RM 目标发送 CreateSequence 协议消息。它包含接收确认的端点的引用( wsrm:AcksTo 端点)。
  2. RM 目标将 CreateSequenceResponse 协议消息发回到 RM 源。此消息包含 RM 序列会话的序列 ID。
  3. RM 源为应用程序源发送的每个消息添加一个 RM Sequence 标头。此标头包含序列 ID 和唯一的消息 ID。
  4. RM 源会将每个消息传输到 RM 目的地。
  5. RM 目标通过发送包含 RM SequenceAcknowledgement 标头的消息,确认来自 RM 源的收据。
  6. RM 目的地以精确的方式向应用目的地传递消息。
  7. 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 节 “运行时控制”)。