2012-08-23 6 views

Odpowiedz

7

Nie ma apletu zookeepera, aby to zrobić, trzeba będzie napisać własne.

Jeśli używasz curator, możesz użyć PathCache, który utrzymuje zegarki na węźle, a także węzły podrzędne. Możesz napisać kod, aby utworzyć więcej PathCache, gdy odkryjesz potomków obserwowanego root'a.

Jeśli masz zamiar rzucić własną wersję tego, jest to dość trudne, aby uzyskać prawo. Ten blog opisuje niektóre problemy.

1

Wiem, że to stare pytanie. Po prostu publikuję tutaj w celach informacyjnych dla innej osoby, takiej jak ja.

Ja też tego szukam. Podążając za końcówką @sbridges, myślę, że mógłbym tak postąpić.

PathChildrenCache pathcache = new PathChildrenCache(client, "/some/path", true); 

PathChildrenCacheListener listner1 = new PathChildrenCacheListener() { 
    Map<String, PathChildrenCache> listener2s = new HashMap<String, PathChildrenCache>(); 
    @Override 
    public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { 
     String path = event.getData().getPath(); 

     if(event.getType() == Type.CHILD_ADDED) { 
      PathChildrenCache cache2 = new PathChildrenCache(client, path, true); 
      cache2.getListenable().addListener(this); 
      cache2.start(); 
      listener2s.put(path, cache2); 
     } 
     else if(event.getType() == Type.CHILD_REMOVED) { 
      PathChildrenCache cache2 = listener2s.remove(path); 
      if(cache2 != null) cache2.close(); 
     } 

     System.out.println("" + Thread.currentThread().getId() + "\t" + event); 
    } 
}; 
pathcache.getListenable().addListener(listner1); 

Jeśli ktoś coś znajdzie, proszę powiedz mi.

+0

Możesz stracić wydarzenia dziecka między otrzymaniem powiadomienia (CHILD_ADDED) a zarejestrowaniem zegarka na dziecku – dk14

Powiązane problemy