Zookeeper学习(五):ZKClient的使用

1.创建会话

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class createSession {  
  2.   
  3.     public static void main(String[] args) {  
  4.         //zk集群的地址  
  5.         String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  6.       
  7.         /** 
  8.          * 创建会话 
  9.          * new SerializableSerializer() 创建序列化器接口,用来序列化和反序列化 
  10.          */  
  11.         ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  12.           
  13.         System.out.println("conneted ok!");  
  14.           
  15.     }  
  16. }  

2.创建节点

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class createNode {  
  2.   
  3.     public static void main(String[] args) {  
  4.         //zk集群的地址  
  5.         String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  6.         ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  7.           
  8.         System.out.println("conneted ok!");  
  9.           
  10.         User user = new User();  
  11.         user.setId(1);  
  12.         user.setName("testUser");  
  13.           
  14.         /** 
  15.          * "/testUserNode" :节点的地址 
  16.          * user:数据的对象 
  17.          * CreateMode.PERSISTENT:创建的节点类型 
  18.          */  
  19.         String path = zkClient.create("/testUserNode", user, CreateMode.PERSISTENT);  
  20.         //输出创建节点的路径  
  21.         System.out.println("created path:"+path);  
  22.     }  
  23. }  

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. //注意:一定要实现序列化接口  implements Serializable  
  2. public class User implements Serializable{  
  3.       
  4.     private Integer id;  
  5.     private String name;  
  6.       
  7.     public Integer getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(Integer id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19. }  

3.获取节点中的数据

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class getData {  
  2.     public static void main(String[] args) {  
  3.                 //zk集群的地址  
  4.                 String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  5.                 ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  6.                 System.out.println("conneted ok!");  
  7.                   
  8.                 Stat stat = new Stat();  
  9.                 //获取 节点中的对象  
  10.                 User  user = zkClient.readData("/testUserNode",stat);  
  11.                 System.out.println(user.getName());  
  12.                 System.out.println(stat);  
  13.     }  
  14. }  

4.判断节点是否存在

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class getData {  
  2.     public static void main(String[] args) {  
  3.                 //zk集群的地址  
  4.                 String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  5.                 ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  6.                 System.out.println("conneted ok!");  
  7.                   
  8.                 boolean e = zkClient.exists("/testUserNode");  
  9.                 //返回 true表示节点存在 ,false表示不存在  
  10.                 System.out.println(e);  
  11.     }  
  12. }  

5.删除节点

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class getData {  
  2.     public static void main(String[] args) {  
  3.                 //zk集群的地址  
  4.                 String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  5.                 ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  6.                 System.out.println("conneted ok!");  
  7.                   
  8.                 //删除单独一个节点,返回true表示成功  
  9.                 boolean e1 = zkClient.delete("/testUserNode");  
  10.                 //删除含有子节点的节点  
  11.                 boolean e2 = zkClient.deleteRecursive("/test");  
  12.                   
  13.                 //返回 true表示节点成功 ,false表示删除失败  
  14.                 System.out.println(e1);  
  15.     }  
  16. }  

6.更新数据

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public static void main(String[] args) {  
  2.                 //zk集群的地址  
  3.                 String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  4.                 ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  5.                 System.out.println("conneted ok!");  
  6.                   
  7.                 User user = new User();  
  8.                 user.setId(2);  
  9.                 user.setName("testUser2");  
  10.                 /** 
  11.                  * testUserNode 节点的路径 
  12.                  * user 传入的数据对象 
  13.                  */  
  14.                 zkClient.writeData("/testUserNode", user);  
  15.     }  

7.订阅节点的信息改变(创建节点,删除节点,添加子节点)

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class SubscribeChildChanges {  
  2.     private static class ZKChildListener implements IZkChildListener{  
  3.         /** 
  4.          * handleChildChange: 用来处理服务器端发送过来的通知 
  5.          * parentPath:对应的父节点的路径 
  6.          * currentChilds:子节点的相对路径 
  7.          */  
  8.         public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {  
  9.               
  10.             System.out.println(parentPath);  
  11.             System.out.println(currentChilds.toString());  
  12.               
  13.         }  
  14.           
  15.     }  
  16.       
  17.     public static void main(String[] args) throws InterruptedException {  
  18.         //zk集群的地址  
  19.         String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  20.         ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  21.         System.out.println("conneted ok!");  
  22.         /** 
  23.          * "/testUserNode" 监听的节点,可以是现在存在的也可以是不存在的 
  24.          */  
  25.         zkClient.subscribeChildChanges("/testUserNode3"new ZKChildListener());  
  26.         Thread.sleep(Integer.MAX_VALUE);  
  27.     }  
  28. }  

8.订阅节点的数据内容的变化

[java]   view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. public class SubscribeDataChanges {  
  2.     private static class ZKDataListener implements IZkDataListener{  
  3.   
  4.         public void handleDataChange(String dataPath, Object data) throws Exception {  
  5.               
  6.             System.out.println(dataPath+":"+data.toString());  
  7.         }  
  8.   
  9.         public void handleDataDeleted(String dataPath) throws Exception {  
  10.               
  11.             System.out.println(dataPath);  
  12.               
  13.         }  
  14.          
  15.           
  16.     }  
  17.       
  18.     public static void main(String[] args) throws InterruptedException {  
  19.         //zk集群的地址  
  20.         String ZKServers = "192.168.30.164:2181,192.168.30.165:2181,192.168.30.166:2181";  
  21.         ZkClient zkClient = new ZkClient(ZKServers,10000,10000,new SerializableSerializer());  
  22.         System.out.println("conneted ok!");  
  23.   
  24.         zkClient.subscribeDataChanges("/testUserNode"new ZKDataListener());  
  25.         Thread.sleep(Integer.MAX_VALUE);  
  26.           
  27.     }  
  28. }  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值