2012-08-23 5 views

答えて

7

これを行う動物園のAPIはありません。あなた自身で作成する必要があります。

curatorを使用している場合は、ノード上でウォッチを維持するPathCacheとそのノードの子を使用できます。見ているルートの子孫を発見するときに、より多くのPathCachesを作成するコードを書くことができます。

これを独自のバージョンにする場合は、実際にはかなり難しいです。このblogにはいくつかの問題が説明されています。

1

これは古い質問です。私はちょうど私のような他の人のためにここに投稿します。

私はこれも探しています。 @sbridgesの先端に続いて、私はこのようにすることができると思う。

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

何か問題が見つかった場合は、教えてください。

+0

通知(CHILD_ADDED)の取得と子供への腕時計の登録との間で、子供のイベントを緩和することができます – dk14

関連する問題