我正在开发一个项目,我需要在节点上维护一个监视器,并且节点也是子节点。我尝试过使用PathCache,但我不确定如何在这里观看儿童?
这里我的根节点是 - "/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 :(得分:5)
使用TreeCache代替。它完成了PathCache所能做的所有事情,并且可以处理子节点。
答案 1 :(得分:2)
你有解决这个问题的方法吗?
我可以建议使用这样的孩子:
因此将test1的子节点附加到test1本身的名称中。