21.2. ws-RM Interceptors

概述

在 Apache CXF 中,WS-RM 功能作为拦截器实施。Apache CXF 运行时使用拦截器截获并使用正在发送和接收的原始消息。当传输收到消息时,它会创建一个消息对象,并通过拦截器链发送该消息。如果应用程序拦截器链包含 WS-RM 拦截器,则应用程序可以参与可靠的消息传递会话。WS-RM 拦截器处理消息块的集合和聚合。它们还处理所有确认和重新传输逻辑。

Apache CXF WS-RM Interceptors

Apache CXF WS-RM 实现由四个拦截器组成,在 表 21.1 “Apache CXF WS-ReliableMessaging Interceptors” 中描述。

表 21.1. Apache CXF WS-ReliableMessaging Interceptors

拦截器描述

org.apache.cxf.ws.rm.RMOutInterceptor

涉及为外发消息提供可靠性保证的逻辑方面。

负责发送 CreateSequence 请求并等待它们的 CreateSequenceResponse 响应。

此外,还负责聚合序列属性-ID 和消息编号(用于应用消息)。

org.apache.cxf.ws.rm.RMInInterceptor

负责截获和处理 RM 协议消息和 序列 消息,这些消息由应用程序消息提供支持。

org.apache.cxf.ws.rm.RMCaptureInInterceptor

为持久性存储缓存传入的信息。

org.apache.cxf.ws.rm.RMDeliveryInterceptor

有助于向应用程序传输消息。

org.apache.cxf.ws.rm.soap.RMSoapInterceptor

负责将可靠性属性编码并解码为 SOAP 标头。

org.apache.cxf.ws.rm.RetransmissionInterceptor

负责创建应用程序消息的副本以备将来重新发送。

启用 WS-RM

拦截器链中存在 WS-RM 拦截器可确保在需要时交换 WS-RM 协议消息。例如,在出站拦截器链中截获第一个应用程序消息时,RMOutInterceptor 会发送 CreateSequenceptor 请求,并等待处理原始应用程序消息,直到它收到 CreateSequence Response 响应。此外,WS-RM 拦截器将序列标头添加到应用程序消息中,并在目的地一侧从消息中提取它们。不需要对您的应用程序代码进行任何更改,以便可靠地交换消息。

有关如何启用 WS-RM 的更多信息,请参阅 第 21.3 节 “启用 WS-RM”

配置 WS-RM 属性

通过配置,您可以控制操作序列以及可靠交换的其他方面。例如,默认情况下,Apache CXF 尝试最大限度地提高序列生命周期,从而减少了带外 WS-RM 协议消息的开销。要强制每个应用程序消息使用单独的序列,请配置 WS-RM 源序列终止策略(将最大序列长度设置为 1)。

有关配置 WS-RM 行为的详情请参考 第 21.5 节 “配置 WS-RM”