21.4. 运行时控制
概述
可以在客户端代码中设置多个消息上下文属性值,以便在运行时控制 WS-RM,且由 org.apache.cxf.rm.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 ...