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

今、期限切れの Event in process メソッドをキャッチしています。

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 に答える