我正在研究一個項目,我需要在一個節點上維護一個手錶,並且該節點也是子節點。我嘗試過使用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。
我想你必須保持每一個被添加到「/ my/test」的孩子 – weima