2012-08-23 30 views

Trả lời

7

Không có api vườn thú để làm điều đó, bạn sẽ phải viết của riêng bạn.

Nếu bạn đang sử dụng curator, bạn có thể sử dụng PathCache để duy trì đồng hồ trên nút và các nút con. Bạn có thể viết một số mã để tạo thêm PathCaches khi bạn khám phá con cháu của thư mục gốc mà bạn đang xem.

Nếu bạn định cuộn phiên bản của riêng mình, nó thực sự khá phức tạp để có được quyền. Điều này blog mô tả một số vấn đề.

1

Tôi biết đây là câu hỏi cũ. Tôi chỉ đăng ở đây để tham khảo cho một số người khác như tôi.

Tôi cũng đang tìm kiếm điều này. Sau đầu của @sbridges, tôi nghĩ rằng tôi có thể làm như thế này.

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

Nếu ai đó tìm thấy điều gì sai, vui lòng cho tôi biết.

+0

Bạn có thể mất các sự kiện của trẻ giữa nhận thông báo (CHILD_ADDED) và đăng ký đồng hồ của bạn trên con – dk14

Các vấn đề liên quan