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.