使用zookeeper遇到问题:
- 重复注册watcher
- session失效重连
- 异常处理(删除节点不能有子节点,新增节点必须有父节点等)
zkclient是Github上一个开源的Zookeeper客户端,在Zookeeper原生 API接口之上进行了包装,是一个更加易用的Zookeeper客户端。同时Zkclient在内部实现了诸如Session超时重连,Watcher反复注册等功能,从而提高开发效率。
添加依赖
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
创建会话
String connStr = "192.168.154.128:2181";
ZkClient zk = new ZkClient(connStr);
创建节点
String res = zk.create("/root", "hgy", CreateMode.PERSISTENT);
修改节点数据
zk.writeData("/root", "hgy");
获取节点数据
String res = zk.readData("/root");
删除节点
zk.delete("/root");
注册数据监听
java
zk.subscribeDataChanges("/root/ghz", new IZkDataListener() {
@Override
public void handleDataDeleted(String arg0) throws Exception {
System.err.println("数据删除:" + arg0);
}
@Override
public void handleDataChange(String arg0, Object arg1) throws Exception {
System.err.println("数据修改:" + arg0 + "------" + arg1);
}
});
注册节点监听
java
zk.subscribeChildChanges("/root", (arg0, arg1) -> {
System.err.println("子节点发生变化:" + arg0);
arg1.forEach(f -> {
System.out.println("content:" + f);
});
});