21.4. 运行时控制
概述
可以在客户端代码中设置几个消息上下文属性值,以控制运行时的 WS-RM,在 org.apache.cxf.ws.rm.RMManager
类中由公共常量定义键值。
运行时控制选项
下表列出了 org.apache.cxf.ws.rm.RMManager
类定义的键。
键 | 描述 |
---|---|
|
字符串 WS-RM 版本命名空间( |
|
字符串 WS-Addressing 版本命名空间( |
|
布尔值 |
| 以毫秒为单位的长时间不活跃超时。 |
| 长时间的基本重新传输间隔(以毫秒为单位)。 |
| 布尔值 exponential back-off 标志。 |
| 较长的确认间隔(以毫秒为单位)。 |
通过 JMX 控制 WS-RM
您还可以使用 Apache CXF 的 JMX 管理功能监控和控制 WS-RM 的很多方面。JMX 操作的完整列表由 org.apache.cxf.ws.rm.ManagedRMManager
和 org.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 ...