2012-08-23 13 views

cevap

7

Bunu yapmak için bir zookeeper api yok, kendi yazmanız gerekecek.

curator kullanıyorsanız, bir düğümü izleyen ve bu düğümleri çocuklar olan PathCache kullanabilirsiniz. İzlediğiniz kökün soyunu keşfettikçe daha fazla PathCaches oluşturmak için bir kod yazabilirsiniz.

Eğer bunun kendi versiyonunu kullanacaksanız, haklı olmak oldukça zordur. Bu blog, bazı sorunları açıklar.

1

Bunun eski bir soru olduğunu biliyorum. Ben sadece benim gibi başka bir kişi için referans için buraya gönderiyorum.

Bunu da arıyorum. @sbridges'un ipucunu takiben, böyle yapabileceğimi düşünüyorum.

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

Birisi yanlış bir şey buluyorsa, lütfen bana bildirin.

+0

Çocuğun etkinliklerini bildirim alma (CHILD_ADDED) ile saatinizi çocuğa kaydetme arasında kaybedebilirsiniz. – dk14

İlgili konular