2016-06-22 2 views
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() 
       } 
} 

이 메소드는 만료시 실행되지만 노드의 변경 사항에 따라 시계가 트리거되지 않습니다.

답변

0

마지막으로 해결책을 찾았습니다.

노드와 모든 하위 노드의 감시자를 직접 관리해야합니다. 사용 된 Treecache는 세션 만료시 모든 감시자도 관리합니다.

관련 문제