21.5. 配置 WS-RM


21.5.1. 配置 Apache CXF 特定 WS-RM 属性

概述

要配置特定于 Apache CXF 的属性,请使用 rmManager Spring bean。在您的配置文件中添加以下内容:

例 21.4 “配置 Apache CXF 特定 WS-RM 属性” 显示一个简单的示例。

例 21.4. 配置 Apache CXF 特定 WS-RM 属性

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 http://cxf.apache.org/ws/rm/manager http://cxf.apache.org/schemas/configuration/wsrm-manager.xsd">
...
<wsrm-mgr:rmManager>
<!--
  ...Your configuration goes here
-->
</wsrm-mgr:rmManager>

rmManager Spring bean 的子项

表 21.2 “rmManager Spring Bean 的子项” 显示 http://cxf.apache.org/ws/rm/manager 命名空间中定义的 rmManager Spring bean 的子元素。

表 21.2. rmManager Spring Bean 的子项
element描述

RMAssertion

类型的 RMAssertion元素

deliveryAssurance

一个类型为 DeliveryAsuranceType 元素,用于描述应应用的发送保证

sourcePolicy

一个类型为 SourcePolicyType 的元素,供您配置 RM 源详情

destinationPolicy

一个类型为 DestinationPolicyType 的元素,供您配置 RM 目的地详情

示例

例如,请参阅 “最多未确认的消息阈值”一节

21.5.2. 配置标准 WS-RM 策略属性

概述

您可以使用以下方法之一配置标准 WS-RM 策略属性:

WS-Policy RMAssertion Children

表 21.3 “WS-Policy RMAsertion Element 的子项” 显示 http://schemas.xmlsoap.org/ws/2005/02/rm/policy 命名空间中定义的元素:

表 21.3. WS-Policy RMAsertion Element 的子项
名称描述

InactivityTimeout

指定在端点可以视为因为不活跃而终止的 RM 序列前必须收到消息前必须经过的时间长度。

BaseRetransmissionInterval

设置确认在 RM Source 中给定邮件必须接收的间隔。如果 BaseRetransmissionInterval 设定的时间内未收到确认,RM Source 将重新传输该消息。

ExponentialBackoff

表示将使用通常已知的 exponential backoff 算法(Tanenbaum)调整重新传输间隔。

如需更多信息,请参阅 Computer Networks, Andrew S. Tanenbaum, Prentice Hall PTR, 2003。

AcknowledgementInterval

在 WS-RM 中,确认会在返回信息上发送或发送独立消息。如果返回消息无法发送确认,则 RM Destination 可以在发送独立确认前等待确认间隔。如果没有未被确认的消息,则 RM Destination 不能被确认。

更详细的参考信息

如需更详细的参考信息,包括每个元素和属性的描述,请参阅 http://schemas.xmlsoap.org/ws/2005/02/rm/wsrm-policy.xsd

rmManager Spring bean 中的 RMAssertion

您可以通过在 Apache CXF rmManager Spring bean 中添加 RMAssertion 来配置标准 WS-RM 策略属性。如果您想在同一配置文件中保留所有 WS-RM 配置,这是最佳的方法。也就是说,如果要在同一文件中配置特定于 Apache CXF 的属性和标准 WS-RM 策略属性。

例如,例 21.5 “在 rmManager Spring Bean 中使用 RMAsertion 配置 WS-RM 属性” 中的配置会显示:

  • 使用 rmManager Spring bean 中的 RMAsertion 配置的标准 WS- RM 策略属性 BaseRetransmissionInterval
  • 同一配置文件中配置的 Apache CXF 特定 RM 属性 intraMessageThreshold

例 21.5. 在 rmManager Spring Bean 中使用 RMAsertion 配置 WS-RM 属性

<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
       xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager"
...>
<wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager">
    <wsrm-policy:RMAssertion>
        <wsrm-policy:BaseRetransmissionInterval Milliseconds="4000"/>
    </wsrm-policy:RMAssertion>
    <wsrm-mgr:destinationPolicy>
        <wsrm-mgr:acksPolicy intraMessageThreshold="0" />
    </wsrm-mgr:destinationPolicy>
</wsrm-mgr:rmManager>
</beans>

功能中的策略

您可以在功能中配置标准 WS-RM 策略属性,如 例 21.6 “在功能中将 WS-RM 属性配置为策略” 所示。

例 21.6. 在功能中将 WS-RM 属性配置为策略

<xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:wsa="http://cxf.apache.org/ws/addressing"
        xmlns:wsp="http://www.w3.org/2006/07/ws-policy"
        xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        xsi:schemaLocation="
http://www.w3.org/2006/07/ws-policy http://www.w3.org/2006/07/ws-policy.xsd
http://cxf.apache.org/ws/addressing http://cxf.apache.org/schema/ws/addressing.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <jaxws:endpoint name="{http://cxf.apache.org/greeter_control}GreeterPort" createdFromAPI="true">
        <jaxws:features>
               <wsp:Policy>
                   <wsrm:RMAssertion xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
                     <wsrm:AcknowledgementInterval Milliseconds="200" />
                   </wsrm:RMAssertion>
                   <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
                       <wsp:Policy>
                            <wsam:NonAnonymousResponses/>
                       </wsp:Policy>
                   </wsam:Addressing>
              </wsp:Policy>
        </jaxws:features>
    </jaxws:endpoint>
</beans>

WSDL 文件

如果使用 WS-Policy 框架启用 WS-RM,您可以在 WSDL 文件中配置标准 WS-RM 策略属性。如果您希望服务进行互操作并使用 WS-RM 与部署到其他策略感知的 Web 服务堆栈的用户无缝使用,这是不错的方法。

例如,请参阅 “WS-Policy 框架:隐式添加拦截器”一节,其中基本重新传输间隔在 WSDL 文件中配置。

外部附加

您可以在外部附件文件中配置标准 WS-RM 策略属性。如果您无法或不想更改 WSDL 文件,这是不错的方法。

例 21.7 “在外部附加中配置 WS-RM” 显示为特定 EPR 启用 WS-A 和 WS-RM (基础重新传输间隔 30 秒)的外部附加。

例 21.7. 在外部附加中配置 WS-RM

<attachments xmlns:wsp="http://www.w3.org/2006/07/ws-policy" xmlns:wsa="http://www.w3.org/2005/08/addressing">
    <wsp:PolicyAttachment>
        <wsp:AppliesTo>
           <wsa:EndpointReference>
                <wsa:Address>http://localhost:9020/SoapContext/GreeterPort</wsa:Address>
            </wsa:EndpointReference>
        </wsp:AppliesTo>
        <wsp:Policy>
            <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
                <wsp:Policy/>
            </wsam:Addressing>
            <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
                <wsrmp:BaseRetransmissionInterval Milliseconds="30000"/>
            </wsrmp:RMAssertion>
        </wsp:Policy>
    </wsp:PolicyAttachment>
</attachments>/

21.5.3. WS-RM 配置用例

概述

本小节重点介绍从用例角度配置 WS-RM 属性。如果属性是 http://schemas.xmlsoap.org/ws/2005/02/rm/policy/ 命名空间中定义的标准 WS-RM 策略属性,则只显示在 rmManager Spring bean 中的 RMAssertion 中设置它的示例。有关如何在功能内设置这样的属性 ; 在 WSDL 文件或外部附加中,请参阅 第 21.5.2 节 “配置标准 WS-RM 策略属性”

涵盖了以下用例:

基本重新传输间隔

BaseRetransmissionInterval 元素指定 RM 源重新传输消息尚未被确认的间隔。它在 http://schemas.xmlsoap.org/ws/2005/02/rm/wsrm-policy.xsd 模式文件中定义。默认值为 3000 毫秒。

例 21.8 “设置 WS-RM Base Retransmission Interval” 显示如何设置 WS-RM 基本重新传输间隔。

例 21.8. 设置 WS-RM Base Retransmission Interval

<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy
...>
<wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager">
    <wsrm-policy:RMAssertion>
        <wsrm-policy:BaseRetransmissionInterval Milliseconds="4000"/>
    </wsrm-policy:RMAssertion>
</wsrm-mgr:rmManager>
</beans>

重新传输的 exponential backoff

ExponentialBackoff 元素确定是否以指数级间隔执行非确认的消息尝试连续重传输尝试。

存在 ExponentialBackoff 元素可启用此功能。默认会使用 exponential backoff 比率为 2ExponentialBackoff 是一个标志。当元素存在时,会启用 exponential backoff。当元素不存在时,则禁用 exponential backoff。不需要值。

例 21.9 “设置 WS-RM Exponential Backoff Property” 显示如何为重新传输设置 WS-RM exponential backoff。

例 21.9. 设置 WS-RM Exponential Backoff Property

<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy
...>
<wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager">
    <wsrm-policy:RMAssertion>
        <wsrm-policy:ExponentialBackoff/>
    </wsrm-policy:RMAssertion>
</wsrm-mgr:rmManager>
</beans>

确认间隔

AcknowledgementInterval 元素指定 WS-RM 目的地发送异步确认的间隔。另外,除了它在收到传入消息时发送的同步确认之外。默认异步确认间隔为 0 毫秒。这意味着,如果 AcknowledgementInterval 没有被配置为特定值,则会立即发送确认信息(即在第一可用商机中)。

只有在满足以下任一条件时,RM 目标才会发送异步确认:

  • RM 目的地使用非匿名 wsrm:acksTo 端点。
  • 在确认间隔到期前不会发生响应消息确认机会。

例 21.10 “设置 WS-RM 致谢 Interval” 显示如何设置 WS-RM 确认间隔。

例 21.10. 设置 WS-RM 致谢 Interval

<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy
...>
<wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager">
    <wsrm-policy:RMAssertion>
        <wsrm-policy:AcknowledgementInterval Milliseconds="2000"/>
    </wsrm-policy:RMAssertion>
</wsrm-mgr:rmManager>
</beans>

最多未确认的消息阈值

maxUnack nowled 属性设置在终止序列前可以获取每个序列的最大未确认消息数。

例 21.11 “设置 WS-RM Maximum Unacknowled Message Threshold” 显示如何设置 WS-RM 最大无法确认的消息阈值。

例 21.11. 设置 WS-RM Maximum Unacknowled Message Threshold

<beans xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager
...>
<wsrm-mgr:reliableMessaging>
    <wsrm-mgr:sourcePolicy>
        <wsrm-mgr:sequenceTerminationPolicy maxUnacknowledged="20" />
    </wsrm-mgr:sourcePolicy>
</wsrm-mgr:reliableMessaging>
</beans>

RM 序列的最大长度

maxLength 属性设置 WS-RM 序列的最大长度。默认值为 0, 这表示 WS-RM 序列的长度为 unbound。

当设置了此属性时,RM 端点会在达到限制时创建一个新的 RM 序列,并在收到之前发送的消息的所有确认后。新消息使用新的排序发送。

例 21.12 “设置 WS-RM 消息序列的最大长度” 显示如何设置 RM 序列的最大长度。

例 21.12. 设置 WS-RM 消息序列的最大长度

<beans xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager
...>
<wsrm-mgr:reliableMessaging>
    <wsrm-mgr:sourcePolicy>
        <wsrm-mgr:sequenceTerminationPolicy maxLength="100" />
    </wsrm-mgr:sourcePolicy>
</wsrm-mgr:reliableMessaging>
</beans>

消息发送保证策略

您可以将 RM 目标配置为使用以下发送保证策略:

  • AtMostOnce - RM 目的地仅向应用程序目的地发送一次。如果引发了错误,则发送一条消息超过一次。可能不会发送序列中的一些消息。
  • AtLeastOnce - RM 目标至少将消息传送到应用程序目的地。发送的每个消息都会进行交付,或引发错误。有些消息可能会多一次发送。
  • InOrder - RM 目的地按发送的顺序将消息传送到应用程序目的地。这种交付保障可与 AtMostOnceAtLeastOnce ures 结合使用。

例 21.13 “设置 WS-RM 消息发送保证策略” 介绍如何设置 WS-RM 消息发送保证。

例 21.13. 设置 WS-RM 消息发送保证策略

<beans xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager
...>
<wsrm-mgr:reliableMessaging>
    <wsrm-mgr:deliveryAssurance>
        <wsrm-mgr:AtLeastOnce />
    </wsrm-mgr:deliveryAssurance>
</wsrm-mgr:reliableMessaging>
</beans>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.