2012-08-23 8 views

risposta

7

Non ci sono zookeeper api per farlo, dovrai scriverne uno tuo.

Se si utilizza curator, è possibile utilizzare PathCache che mantiene gli orologi su un nodo e che i nodi figli. Puoi scrivere del codice per creare più PathCaches mentre scopri i discendenti della root che stai guardando.

Se si sta per eseguire il rollover della propria versione di questo, in realtà è piuttosto difficile da ottenere. Questo blog descrive alcuni dei problemi.

1

So che questa è una vecchia domanda. Ho appena postato qui per riferimento per qualche altra persona come me.

Anche io sto cercando questo. Seguendo la punta di @sbridge, penso che potrei fare così.

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

Se qualcuno trova qualcosa di sbagliato, la prego di dirmelo.

+0

È possibile perdere gli eventi del bambino tra la ricezione della notifica (CHILD_ADDED) e la registrazione dell'orologio sul bambino – dk14

Problemi correlati