有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java手表在到期时重置后不会被触发

我有一个basepath,它有多个孩子。我正在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()  
                }
}

该方法在到期时执行,但在节点中的任何更改都不会触发监视


共 (1) 个答案

  1. # 1 楼答案

    最后我自己找到了解决办法

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