Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache zookeeper 是否可以监视ZooKeeper中所有子代节点上的事件?_Apache Zookeeper - Fatal编程技术网

Apache zookeeper 是否可以监视ZooKeeper中所有子代节点上的事件?

Apache zookeeper 是否可以监视ZooKeeper中所有子代节点上的事件?,apache-zookeeper,Apache Zookeeper,使用ZooKeeper时,是否可以监视后代znode上的所有事件 例如,如果我有: (/) / \ (/a) (/b) / \ (/c) (/d) 有没有办法监视根目录对/a、/b、/c和/d的更改?没有ZooKeeper api可以做到这一点,您必须自己编写 如果您正在使用,则可以使用维护节点上的监视以及该节点的子节点。当您发现正在监视的根的后代时,可以编写一些代码来创建更多的PathCache 如果你打算推出你自己的版本,这实际上

使用ZooKeeper时,是否可以监视后代znode上的所有事件

例如,如果我有:

     (/)
     /  \
   (/a)  (/b)
   /       \
(/c)       (/d)

有没有办法监视根目录对/a、/b、/c和/d的更改?

没有ZooKeeper api可以做到这一点,您必须自己编写

如果您正在使用,则可以使用维护节点上的监视以及该节点的子节点。当您发现正在监视的根的后代时,可以编写一些代码来创建更多的PathCache


如果你打算推出你自己的版本,这实际上是相当棘手的得到正确的。这描述了一些问题。

我知道这是一个老问题。我只是在这里发布,供像我这样的人参考

我也在找这个。按照@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);
PathChildrenCache-pathcache=new-PathChildrenCache(客户端,“/some/path”,true);
PathChildrencCacheListener Listener1=新的PathChildrencCacheListener(){
Map listener2s=新HashMap();
@凌驾
public void childEvent(CuratorFramework客户端,PathChildrenCacheEvent事件)引发异常{
字符串路径=event.getData().getPath();
if(event.getType()==Type.CHILD_添加){
PathChildrenCache2=新的PathChildrenCache(客户端,路径,true);
cache2.getListenable().addListener(此);
cache2.start();
listener2s.put(路径,cache2);
}
else if(event.getType()==Type.CHILD\u已删除){
PathChildrenCache2=listener2s.remove(路径);
如果(cache2!=null)cache2.close();
}
System.out.println(“+Thread.currentThread().getId()+”\t“+事件);
}
};
pathcache.getListenable().addListener(Listener1);

如果有人发现问题,请告诉我。

如果您将zookeeper版本升级到3.6.0,可以使用持久递归手表,而不是路径缓存。 看到和


也有支持。

您可以在收到通知(添加了child_)和在child上注册手表之间释放孩子的事件这是一项新功能吗?从哪个版本开始?@SswaterShi从v2.7开始就有了()