21.4. 运行时控制


概述

可以在客户端代码中设置几个消息上下文属性值,以控制运行时的 WS-RM,在 org.apache.cxf.ws.rm.RMManager 类中由公共常量定义键值。

运行时控制选项

下表列出了 org.apache.cxf.ws.rm.RMManager 类定义的键。

描述

WSRM_VERSION_PROPERTY

字符串 WS-RM 版本命名空间(http://schemas.xmlsoap.org/ws/2005/02/rm/http://docs.oasis-open.org/ws-rx/wsrm/200702)。

WSRM_WSA_VERSION_PROPERTY

字符串 WS-Addressing 版本命名空间(http://schemas.xmlsoap.org/ws/2004/08/addressinghttp://www.w3.org/2005/08/addressing)- 除非使用 http://schemas.xmlsoap.org/ws/2005/02/rm/ RM 命名空间,否则会忽略此属性。

WSRM_LAST_MESSAGE_PROPERTY

布尔值 true 告知 WS-RM 代码正在发送的最后一个消息,允许代码关闭 WS-RM 序列和发布资源(从 3.0.0 版本为 CXF ),WS-RM 默认关闭 RM 序列。

WSRM_INACTIVITY_TIMEOUT_PROPERTY

以毫秒为单位的长时间不活跃超时。

WSRM_RETRANSMISSION_INTERVAL_PROPERTY

长时间的基本重新传输间隔(以毫秒为单位)。

WSRM_EXPONENTIAL_BACKOFF_PROPERTY

布尔值 exponential back-off 标志。

WSRM_ACKNOWLEDGEMENT_INTERVAL_PROPERTY

较长的确认间隔(以毫秒为单位)。

通过 JMX 控制 WS-RM

您还可以使用 Apache CXF 的 JMX 管理功能监控和控制 WS-RM 的很多方面。JMX 操作的完整列表由 org.apache.cxf.ws.rm.ManagedRMManagerorg.apache.cxf.ws.rm.ManagedRMEndpoint 定义,但这些操作包括查看单个消息级别的当前 RM 状态。您还可以使用 JXM 关闭或终止 WS-RM 序列,并接收之前由远程 RM 端点确认的消息的通知。

JMX 控制示例

例如,如果您在客户端配置中启用了 JMX 服务器,您可以使用以下代码来跟踪收到的最后确认号:

// Java
private static class AcknowledgementListener implements NotificationListener {
    private volatile long lastAcknowledgement;

    @Override
    public void handleNotification(Notification notification, Object handback) {
        if (notification instanceof AcknowledgementNotification) {
            AcknowledgementNotification ack = (AcknowledgementNotification)notification;
            lastAcknowledgement = ack.getMessageNumber();
        }
    }

    // initialize client
...
    // attach to JMX bean for notifications
    //  NOTE: you must have sent at least one message to initialize RM before executing this code
    Endpoint ep = ClientProxy.getClient(client).getEndpoint();
    InstrumentationManager im = bus.getExtension(InstrumentationManager.class);
    MBeanServer mbs = im.getMBeanServer();
    RMManager clientManager = bus.getExtension(RMManager.class);
    ObjectName name = RMUtils.getManagedObjectName(clientManager, ep);
    System.out.println("Looking for endpoint name " + name);
    AcknowledgementListener listener = new AcknowledgementListener();
    mbs.addNotificationListener(name, listener, null, null);

    // send messages using RM with acknowledgement status reported to listener
...
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.