常用使用方法:
1.创建客户端连接
new ZKConnection(addrs,timeout);
public class ZkClientBase {
static final String CONNECT_ADDR = “192.168.1.104:2181,192.168.1.105:2181,192.168.1.107:2181”;
static final int SESSION_TIMEOUT = 5000;
public static void main(String[] args) throws InterruptedException {
ZkClient zkClient = new ZkClient(new ZkConnection(CONNECT_ADDR), SESSION_TIMEOUT);
}
}
2.创建与删除节点
1.create和delete方法
zkClient.createEphemeral(“/temp”); //创建临时节点,会话失效后删除
zkClient.createPersistent(“/super/c1”, true);
//创建持久化节点,true表示如果父节点不存在则创建父节点
Thread.sleep(10000);
zkClient.delete(“/temp”); //删除节点
zkClient.deleteRecursive(“/super”);//递归删除,如果该节点下有子节点,会把子节点也删除
3.设置与读取节点内容
zkClient.createPersistent(“/super”, “1234”); //创建并设置节点的值
zkClient.createPersistent(“/super/c1”, “内容一”);
List children = zkClient.getChildren(“/super”);
for(String child : children) {
System.out.print(child + “:”);
String childPath = “/super/“ + child;
String data = zkClient.readData(childPath);
}
4.更新和判断节点是否存在
zkClient.writeData(“/super/c1”, “新内容”); //修改指定节点的值
String cData = zkClient.readData(“/super/c1”);
System.out.println(cData);
System.out.println(zkClient.exists(“/super/c1”)); //判断指定节点是否存在
5.监听相关
subscribeDataChanges方法(只监听节点数据的变化)
public class SubscribeDataChanges {
static final String CONNECT_ADDR = “192.168.1.104:2181”;
static final int SESSION_TIMEOUT = 50000;
public static void main(String[] args) throws InterruptedException {
ZkClient zkClient = new ZkClient(new ZkConnection(CONNECT_ADDR, SESSION_TIMEOUT));
zkClient.**subscribeDataChanges**("/super", new IZkDataListener() {
@Override
public void handleDataChange(String s, Object o) throws Exception {
System.out.println("变更节点为:" + s + ",变更数据为:" + o);
}
@Override
public void handleDataDeleted(String s) throws Exception {
System.out.println("删除的节点为:" + s);
}
});
zkClient.createPersistent("/super", "123");
Thread.sleep(3000);
zkClient.writeData("/super", "456", -1);
Thread.sleep(1000);
zkClient.createPersistent("/super/c1", "789"); //不会被监控到
zkClient.deleteRecursive("/super");
Thread.sleep(Integer.MAX_VALUE);
}
}