1.创建会话
public class createSession {
public static void main(String[] args) {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
/**
* 创建会话
* new SerializableSerializer() 创建序列化器接口,用来序列化和反序列化
*/
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
}
}
2.创建节点
public class createNode {
public static void main(String[] args) {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
User user = new User();
user.setId(1);
user.setName("testUser");
/**
* "/testUserNode" :节点的地址
* user:数据的对象
* CreateMode.PERSISTENT:创建的节点类型
*/
String path = zkClient.create("/testUserNode", user, CreateMode.PERSISTENT);
//输出创建节点的路径
System.out.println("created path:"+path);
}
}
//注意:一定要实现序列化接口 implements Serializable
public class User implements Serializable{
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.获取节点中的数据
public class getData {
public static void main(String[] args) {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
Stat stat = new Stat();
//获取 节点中的对象
User user = zkClient.readData("/testUserNode",stat);
System.out.println(user.getName());
System.out.println(stat);
}
}
4.判断节点是否存在
public class getData {
public static void main(String[] args) {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
boolean e = zkClient.exists("/testUserNode");
//返回 true表示节点存在 ,false表示不存在
System.out.println(e);
}
}
5.删除节点
public class getData {
public static void main(String[] args) {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
//删除单独一个节点,返回true表示成功
boolean e1 = zkClient.delete("/testUserNode");
//删除含有子节点的节点
boolean e2 = zkClient.deleteRecursive("/test");
//返回 true表示节点成功 ,false表示删除失败
System.out.println(e1);
}
}
6.更新数据
public static void main(String[] args) {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
User user = new User();
user.setId(2);
user.setName("testUser2");
/**
* testUserNode 节点的路径
* user 传入的数据对象
*/
zkClient.writeData("/testUserNode", user);
}
7.订阅节点的信息改变(创建节点,删除节点,添加子节点)
public class SubscribeChildChanges {
private static class ZKChildListener implements IZkChildListener{
/**
* handleChildChange: 用来处理服务器端发送过来的通知
* parentPath:对应的父节点的路径
* currentChilds:子节点的相对路径
*/
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
System.out.println(parentPath);
System.out.println(currentChilds.toString());
}
}
public static void main(String[] args) throws InterruptedException {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
/**
* "/testUserNode" 监听的节点,可以是现在存在的也可以是不存在的
*/
zkClient.subscribeChildChanges("/testUserNode3", new ZKChildListener());
Thread.sleep(Integer.MAX_VALUE);
}
}
8.订阅节点的数据内容的变化
public class SubscribeDataChanges {
private static class ZKDataListener implements IZkDataListener{
public void handleDataChange(String dataPath, Object data) throws Exception {
System.out.println(dataPath+":"+data.toString());
}
public void handleDataDeleted(String dataPath) throws Exception {
System.out.println(dataPath);
}
}
public static void main(String[] args) throws InterruptedException {
//zk集群的地址
String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";
ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());
System.out.println("conneted ok!");
zkClient.subscribeDataChanges("/testUserNode", new ZKDataListener());
Thread.sleep(Integer.MAX_VALUE);
}
}