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
...