我有一个有多个子节点的basepath。我正在基路径上添加观察者,并在应用程序启动时添加所有子节点。
void init(){
List<String> children = zkCfg.getClient().getChildren().usingWatcher(this).forPath(basePath);
Stat stat = zkCfg.getClient().checkExists().usingWatcher(this).forPath(basePath);
lastKnownVersion.put(basePath.substring(basePath.lastIndexOf('/') + 1), stat.getVersion());
for (String child : children) {
stat = zkCfg.getClient().checkExists().usingWatcher(this).forPath(basePath + "/" + child);
lastKnownVersion.put(child, stat.getVersion());
}
}
现在,我正在捕获过程方法中过期的事件。
public void process(WatchedEvent event) {
try {
synchronized (this) {
if (event.getState().equals(Event.KeeperState.Expired)) {
init()
}
}
此方法在到期时执行,但节点上的任何更改都不会触发监视。
答案 0 :(得分:0)
最后我自己找到了解决方案。
相反,我自己管理节点及其所有子节点上的观察者。使用Treecache,它还管理会话到期时的所有观察者。