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