0

我有一个有多个孩子的基本路径。我在基本路径上添加观察者,并在应用程序启动时添加所有孩子。

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()  
                }
}

此方法在到期时执行,但不会因节点中的任何更改而触发手表。

4

1 回答 1

0

终于自己解决了。

取而代之的是,我自己管理节点及其所有子节点上的观察者。使用 Treecache,它还管理会话到期时的所有观察者。

于 2016-07-01T09:06:51.487 回答