2014-02-10 52 views
8

我正在研究一個項目,我需要在一個節點上維護一個手錶,並且該節點也是子節點。我嘗試過使用PathCache,但我不確定如何在這裏注意兒童的孩子?如何使用curator監視ZooKeeper後代節點上的事件?

這裏我的根節點是 - "/my/test",我正在使用下面的代碼在該節點上監視。我想要做的就是讓手錶保持在"/my/test" znode上。因此,假設如果這些節點被添加到我的根節點 -

"/my/test/test1" 
"/my/test/test2" 
"/my/test/test3" 

然後,我應該得到通知(直到這部分我能使其工作),但如果有新的節點被添加,更新或刪除到"/my/test/test1""/my/test/test2""/my/test/test3"然後我也會收到通知,這是我無法理解如何使其工作的部分。

每當我添加任何新的節點"/my/test""/my/test/test1""/my/test/test2""/my/test/test3"然後手錶獲取與使用下面的代碼觸發。但是,如果我將任何新節點添加到"/my/test/test1""/my/test/test2",那麼沒有手錶會被觸發,我不知道如何爲此添加代碼?任何想法如何做到這一點?

可能是,如果有人已經這樣做了,在過去..所以任何例子將是對我很大的幫助..

下面是我的代碼工作正常"/my/test"孩子但"/my/test/test1"和等不是兒童等

private static final String PATH = "/my/test"; 

public static void main(String[] args) { 
    CuratorFramework client = null; 
    PathChildrenCache cache = null; 
    try { 
     client = CuratorClient.createSimple("localhost:2181"); 
     client.start(); 

     // in this example we will cache data. Notice that this is optional. 
     cache = new PathChildrenCache(client, PATH, true); 
     cache.start(); 

     addListener(cache); 

     for(;;) { 
      try { 
       Thread.sleep(50000); 
      } catch(InterruptedException e) { 
      } 
     } 
    } catch (Exception e1) { 
     e1.printStackTrace(); 
    } 
} 

下面是我的addListener方法 -

private static void addListener(PathChildrenCache cache) { 

    PathChildrenCacheListener listener = new PathChildrenCacheListener() { 
     public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { 
      switch (event.getType()) { 
      case CHILD_ADDED: { 
       System.out.println("Node added: " + ZKPaths.getNodeFromPath(event.getData().getPath())); 
       break; 
      } 

      case CHILD_UPDATED: { 
       System.out.println("Node changed: " + ZKPaths.getNodeFromPath(event.getData().getPath())); 
       break; 
      } 

      case CHILD_REMOVED: { 
       System.out.println("Node removed: " + ZKPaths.getNodeFromPath(event.getData().getPath())); 
       break; 
      } 
      default: 
       break; 
      } 
     } 
    }; 
    cache.getListenable().addListener(listener); 
} 

任何人都可以對我的使用情況提供了一個簡單的例子?我正在使用最近發佈的Curator 2.4.0。

+0

我想你必須保持每一個被添加到「/ my/test」的孩子 – weima

回答

2

您是否解決了此問題?

一個黑客,我可以建議用孩子們喜歡的:

  • /我的/測試/ test1_node1
  • /我的/測試/ test1_node2

所以附加測試1到子節點test1本身的名稱。

4

改爲使用TreeCache。它完成了PathCache所做的一切,並可以處理子節點。

相關問題