我知道对于一个使用python的Zookeeper来说,这个问题已经被问到和回答过了。答案是好的,但是,我想要一些更相关的代码。我已经实现了一个创建节点的方法,但是我想递归地实现它。我的节点的结构如下:
Zookeeper
web服务器
服务器1
服务器2
模块已连接
数据库模块
计算机1
计算机2
服务模块
计算机3
搜索模块
计算机4
我有点像:
Zookeeper zk = new Zookeeper(...);
public void createNodeRecursively(String type) {
final String node = "/" + type + "/" + info.getIP() + ":" + info.getPort(); // Correct line
if (zk.exists("/" + type, null) == null) {
Object ctx = new Object();
StringCallback cb = new StringCallback() {
public void processResult(int rc, String path,
Object ctx, String name) {
if (name.equals("/" + type))// just in case
try {
zk.create(node, info.getBytes(),
Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
} catch (Exception e) {
e.printStackTrace();
}
}
};
zk.create("/" + type, info.getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT, cb, ctx);
} else
zk.create(node, info.getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL);
}
}
正如您所看到的,我多次使用zk.create,因此我希望使该方法递归以获得性能和更好的代码,但我不知道如何开始,如果有人能帮助我,我将非常感激。事先非常感谢。
2条答案
按热度按时间uelo1irk1#
zookeeper具有有用的属性:
(写入)请求的总顺序
它的异步特性。
你可以用它。只需以正确的顺序将整个树作为一堆异步请求发出,然后等待,直到所有请求都成功执行。当然,您可以忽略'nodeexists'异常(但由于这样的事实,这样的错误将被写入日志,这是不好的)。
guz6ccqo2#
我设法取得了更好的成绩: