六:ZooKeeper的java客户端api的使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 一:客户端链接测试 1 package com.yeepay.sxf.createConnection; 2 3 import java.io.IOException; 4 5 import org.

一:客户端链接测试

 1 package com.yeepay.sxf.createConnection;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.zookeeper.ZooKeeper;
 6 import org.apache.zookeeper.ZooKeeper.States;
 7 
 8 /**
 9  * 测试Zookeeper的链接
10  * @author sxf
11  *
12  */
13 public class TestCreateSession {
14 
15     //zooKeeper实例
16     private static ZooKeeper zooKeeper;
17     
18     public static void main(String[] args) throws IOException, InterruptedException {
19         
20         //实例化zooKeeper的实例
21         //参数:(ip地址:端口号  ,当前会话超时时间,自定义事件监听器)
22         zooKeeper=new ZooKeeper("10.151.30.75:2181",5000, new MyWatcher());
23         
24         //获取链接状态
25         States states=zooKeeper.getState();
26         
27         //此链接为异步链接
28         System.out.println("TestCreateSession.main(链接状态):"+states.toString());//CONNECTING
29         
30         Thread.sleep(Integer.MAX_VALUE);
31     }
32 }
33 
34 
35 
36 
37 
38 package com.yeepay.sxf.createConnection;
39 
40 import org.apache.zookeeper.WatchedEvent;
41 import org.apache.zookeeper.Watcher;
42 import org.apache.zookeeper.Watcher.Event.KeeperState;
43 /**
44  * zookeeper实例过程中的事件监听器
45  * @author sxf
46  *
47  */
48 public class MyWatcher implements Watcher{
49 
50 
51     
52     //该方法可以做相关的逻辑代码
53     @Override
54     public void process(WatchedEvent event) {
55         //MyWatcher.process(接收到的事件:)WatchedEvent state:SyncConnected type:None path:null
56         System.out.println("MyWatcher.process(接收到的事件:)"+event);
57         
58         //如果链接成功可以做一些事情
59         if(event.getState()==KeeperState.SyncConnected){
60             System.out.println("MyWatcher.process(链接成功做一些事情:)");
61         }
62         
63     }
64 
65     
66 }
View Code

二:客户端创建节点测试

  1 package com.yeepay.sxf.createNode;
  2 
  3 import java.io.IOException;
  4 import java.security.NoSuchAlgorithmException;
  5 import java.util.ArrayList;
  6 import java.util.List;
  7 
  8 import org.apache.zookeeper.CreateMode;
  9 import org.apache.zookeeper.KeeperException;
 10 import org.apache.zookeeper.WatchedEvent;
 11 import org.apache.zookeeper.Watcher;
 12 import org.apache.zookeeper.ZooKeeper;
 13 import org.apache.zookeeper.Watcher.Event.KeeperState;
 14 import org.apache.zookeeper.ZooDefs.Ids;
 15 import org.apache.zookeeper.ZooDefs.Perms;
 16 import org.apache.zookeeper.data.ACL;
 17 import org.apache.zookeeper.data.Id;
 18 import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
 19 /**
 20  * zooKeeper同步创建节点测试
 21  * @author sxf
 22  *
 23  */
 24 public class TestCreateNodeSyn implements Watcher {
 25 
 26     private static ZooKeeper zooKeeper;
 27     
 28     public static void main(String[] args) throws IOException, InterruptedException, NoSuchAlgorithmException {
 29 //        //实例化zooKeeper链接
 30 //        zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestCreateNodeSyn());
 31 //        //创建链接
 32 //        Thread.sleep(Integer.MAX_VALUE);
 33         
 34         System.out.println(DigestAuthenticationProvider.generateDigest("shangxiaofei:shangxiaofei"));
 35     }
 36 
 37     /**
 38      *权限模式(scheme): ip,digest
 39      *授权对象(ID):
 40      *            ip权限模式:具体的ip地址
 41      *            digest权限模式:username:Base64(SHA-1(username:password))
 42      *
 43      *权限(permission):CREATE(C),DELETE(D),READ(R),WRITE(W),ADMIN(A)
 44      *        注:单个权限,完全权限,复合权限
 45      *
 46      *权限组合:scheme+ID+permission
 47      */
 48     
 49     public void process(WatchedEvent event) {
 50         //链接成功
 51                 if(event.getState()==KeeperState.SyncConnected){
 52                     //同步创建节点
 53                     try {
 54                         //基于ip的权限,意味着这个ip的客户端对此节点有读取权限
 55                         ACL ipacl=new ACL(Perms.READ, new Id("ip", "10.151.30.75"));
 56                         //基于digest的权限,意味着只有这个用户名和密码的客户端才能读取和写的权限
 57                         ACL digetacl=new ACL(Perms.READ|Perms.WRITE,new Id("digest",DigestAuthenticationProvider.generateDigest("shangxiaofei:shangxiaofei")));
 58                     
 59                         List<ACL> myaclAcls=new ArrayList<ACL>();
 60                         myaclAcls.add(ipacl);
 61                         myaclAcls.add(digetacl);
 62                         
 63                         String path=zooKeeper.create("/node_128", "shangxiaofei".getBytes(), myaclAcls, CreateMode.PERSISTENT);
 64                         System.out.println("MyWatcher2.process(创建节点返回的路径:)"+path);
 65                     }catch (NoSuchAlgorithmException e){
 66                         e.printStackTrace();
 67                     } catch (KeeperException e) {
 68                         // TODO Auto-generated catch block
 69                         e.printStackTrace();
 70                     } catch (InterruptedException e) {
 71                         // TODO Auto-generated catch block
 72                         e.printStackTrace();
 73                     }
 74                 }
 75                 
 76     }
 77     
 78     
 79     
 80     
 81 }
 82 
 83 
 84 
 85 
 86 
 87 
 88 package com.yeepay.sxf.createNode;
 89 
 90 import java.io.IOException;
 91 
 92 import org.apache.zookeeper.AsyncCallback;
 93 import org.apache.zookeeper.CreateMode;
 94 import org.apache.zookeeper.WatchedEvent;
 95 import org.apache.zookeeper.Watcher;
 96 import org.apache.zookeeper.Watcher.Event.KeeperState;
 97 import org.apache.zookeeper.ZooDefs.Ids;
 98 import org.apache.zookeeper.ZooKeeper;
 99 /**
100  * zooKeeper异步创建节点测试
101  * @author sxf
102  *
103  */
104 public class TestCreateNodeAsyn implements Watcher {
105 
106     private static ZooKeeper zooKeeper;
107     
108     public static void main(String[] args) throws IOException, InterruptedException {
109         //实例化zooKeeper链接
110         zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestCreateNodeAsyn());
111         //创建链接
112         Thread.sleep(Integer.MAX_VALUE);
113     }
114 
115     @Override
116     public void process(WatchedEvent event) {
117         //链接成功
118                 if(event.getState()==KeeperState.SyncConnected){
119                         //异步创建节点
120                         zooKeeper.create("/node_124", "shangxiaoshuai".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT,new ISstringCallBack(),"sxf创建");
121                 }
122                 
123     }
124     
125     
126     //该类数据异步回调接口实现
127     static class ISstringCallBack implements AsyncCallback.StringCallback{
128 
129         //创建成功rc=0
130         //path,创建节点的路径
131         //ctx,创建节点的传入的上下位
132         //name,创建节点的名字
133         @Override
134         public void processResult(int rc, String path, Object ctx, String name) {
135             StringBuffer sb=new StringBuffer();
136             sb.append("rc="+rc).append("\n");
137             sb.append("path="+path).append("\n");
138             sb.append("ctx="+ctx).append("\n");
139             sb.append("name="+name);
140             System.out.println(sb.toString());
141             /**
142              *rc=0
143              *path=/node_124
144              *ctx=sxf创建
145              *name=/node_124
146              *
147              */
148         }
149         
150     }
151     
152 }
View Code

三:客户端删除节点测试

  1 package com.yeepay.sxf.deleteNode;
  2 
  3 import java.io.IOException;
  4 
  5 import org.apache.zookeeper.WatchedEvent;
  6 import org.apache.zookeeper.Watcher;
  7 import org.apache.zookeeper.Watcher.Event.EventType;
  8 import org.apache.zookeeper.Watcher.Event.KeeperState;
  9 import org.apache.zookeeper.ZooKeeper;
 10 
 11 /**
 12  *同步删除节点中存取的值
 13  * @author sxf
 14  *
 15  */
 16 public class TestDeleteNodeSyn implements Watcher{
 17 
 18     private static ZooKeeper zooKeeper;
 19     
 20     
 21     public static void main(String[] args) throws IOException, InterruptedException {
 22                 //实例化zooKeeper链接
 23                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestDeleteNodeSyn());
 24                 //创建链接
 25                 Thread.sleep(Integer.MAX_VALUE);
 26     }
 27 
 28     /**
 29      * event
 30      * (1)zookeeper链接状态 event.getState()
 31      * (2)zookeeper事件类型 event.getType()
 32      * (3)zookeeper事件触发的节点路径 event.getPath()
 33      */
 34     @Override
 35     public void process(WatchedEvent event) {
 36         try{
 37             //已经连接做一件事情
 38             if(event.getState()==KeeperState.SyncConnected){
 39                 
 40                 if(event.getType()==EventType.None&&event.getPath()==null){
 41                     //删除一个节点
 42                     //第一个参数:删除节点的全路径
 43                     //第二个参素:节点的版本(类似乐观锁),当为-1时,对版本无限制
 44                     zooKeeper.delete("/node_127", -1);
 45                 }else if(event.getType()==EventType.NodeDataChanged){
 46                     
 47                 }
 48                 
 49             }
 50             
 51         }catch(Exception e){
 52             e.printStackTrace();
 53         }
 54         
 55         
 56         
 57     }
 58     
 59     
 60 }
 61 
 62 
 63 
 64 
 65 package com.yeepay.sxf.deleteNode;
 66 
 67 import java.io.IOException;
 68 
 69 import org.apache.zookeeper.AsyncCallback;
 70 import org.apache.zookeeper.WatchedEvent;
 71 import org.apache.zookeeper.Watcher;
 72 import org.apache.zookeeper.Watcher.Event.EventType;
 73 import org.apache.zookeeper.Watcher.Event.KeeperState;
 74 import org.apache.zookeeper.ZooKeeper;
 75 
 76 /**
 77  *异步删除节点
 78  * @author sxf
 79  *
 80  */
 81 public class TestDeleteNodeAsyn implements Watcher{
 82 
 83     private static ZooKeeper zooKeeper;
 84     
 85     
 86     public static void main(String[] args) throws IOException, InterruptedException {
 87                 //实例化zooKeeper链接
 88                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestDeleteNodeAsyn());
 89                 //创建链接
 90                 Thread.sleep(Integer.MAX_VALUE);
 91     }
 92 
 93     /**
 94      * event
 95      * (1)zookeeper链接状态 event.getState()
 96      * (2)zookeeper事件类型 event.getType()
 97      * (3)zookeeper事件触发的节点路径 event.getPath()
 98      */
 99     @Override
100     public void process(WatchedEvent event) {
101         try{
102             //已经连接做一件事情
103             if(event.getState()==KeeperState.SyncConnected){
104                 
105                 if(event.getType()==EventType.None&&event.getPath()==null){
106                     //第一个参数:要删除的节点的全路径
107                     //第二个参数:要删除节点的版本号(类似乐观锁)
108                     //第三个参数:异步删除的回调实现类
109                     //第四个参数:删除传入的上下文
110                     zooKeeper.delete("/node_126", -1, new IsDeleteCallBack(), "删除节点sxf");
111                     
112                 }
113                 
114             }
115             
116         }catch(Exception e){
117             e.printStackTrace();
118         }
119         
120         
121         
122     }
123 
124     /**
125      * 异步删除回调接口实现类
126      * @author sxf
127      *
128      */
129     static class IsDeleteCallBack implements AsyncCallback.VoidCallback{
130         
131         //第一个参数:返回删除成功rc
132         @Override
133         public void processResult(int rc, String path, Object ctx) {
134             StringBuffer sb=new StringBuffer();
135             sb.append("rc="+rc).append("\n");
136             sb.append("path="+path).append("\n");
137             sb.append("ctx="+ctx).append("\n");
138             System.out.println(sb.toString());
139             /**
140              * rc=0
141              *    path=/node_126
142              *    ctx=删除节点sxf
143              */
144         }
145         
146     }
147     
148 }
View Code

四:客户端判断节点是否存在测试

  1 package com.yeepay.sxf.existsNode;
  2 
  3 import java.io.IOException;
  4 
  5 import org.apache.zookeeper.WatchedEvent;
  6 import org.apache.zookeeper.Watcher;
  7 import org.apache.zookeeper.Watcher.Event.EventType;
  8 import org.apache.zookeeper.Watcher.Event.KeeperState;
  9 import org.apache.zookeeper.ZooKeeper;
 10 import org.apache.zookeeper.data.Stat;
 11 
 12 /**
 13  *同步判断节点是否存在
 14  * @author sxf
 15  *
 16  */
 17 public class TestExistsNodeSyn implements Watcher{
 18 
 19     private static ZooKeeper zooKeeper;
 20     
 21     
 22     public static void main(String[] args) throws IOException, InterruptedException {
 23                 //实例化zooKeeper链接
 24                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestExistsNodeSyn());
 25                 //创建链接
 26                 Thread.sleep(Integer.MAX_VALUE);
 27     }
 28 
 29     /**
 30      * event
 31      * (1)zookeeper链接状态 event.getState()
 32      * (2)zookeeper事件类型 event.getType()
 33      * (3)zookeeper事件触发的节点路径 event.getPath()
 34      */
 35     @Override
 36     public void process(WatchedEvent event) {
 37         try{
 38             //已经连接做一件事情
 39             if(event.getState()==KeeperState.SyncConnected){
 40                 
 41                 if(event.getType()==EventType.None&&event.getPath()==null){
 42                     //第一个参数:判断节点的全路径
 43                     //第二个参数:是否注册监听器
 44                     Stat stat=zooKeeper.exists("/node_123",true);
 45                     System.out.println(stat);
 46                 }else if(event.getType()==EventType.NodeDataChanged){
 47                     //节点数据改变
 48                     Stat stat=zooKeeper.exists(event.getPath(),true);
 49                     System.out.println("节点数据改变=>"+stat);
 50                 }else if(event.getType()==EventType.NodeCreated){
 51                     //节点被创建
 52                     Stat stat=zooKeeper.exists(event.getPath(),true);
 53                     System.out.println("节点被创建=>"+stat);
 54                 }else if(event.getType()==EventType.NodeDeleted){
 55                     //节点被删除
 56                     Stat stat=zooKeeper.exists(event.getPath(),true);
 57                     System.out.println("节点被删除=>"+stat);
 58                 }
 59                 
 60             }
 61             
 62         }catch(Exception e){
 63             e.printStackTrace();
 64         }
 65         
 66         
 67         
 68     }
 69     
 70     
 71 }
 72 
 73 
 74 
 75 
 76 package com.yeepay.sxf.existsNode;
 77 
 78 import java.io.IOException;
 79 
 80 import org.apache.zookeeper.AsyncCallback;
 81 import org.apache.zookeeper.WatchedEvent;
 82 import org.apache.zookeeper.Watcher;
 83 import org.apache.zookeeper.Watcher.Event.EventType;
 84 import org.apache.zookeeper.Watcher.Event.KeeperState;
 85 import org.apache.zookeeper.ZooKeeper;
 86 import org.apache.zookeeper.data.Stat;
 87 
 88 /**
 89  *异步判断节点是否存在
 90  * @author sxf
 91  *
 92  */
 93 public class TestExistsNodeAsyn implements Watcher{
 94 
 95     private static ZooKeeper zooKeeper;
 96     
 97     
 98     public static void main(String[] args) throws IOException, InterruptedException {
 99                 //实例化zooKeeper链接
100                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestExistsNodeAsyn());
101                 //创建链接
102                 Thread.sleep(Integer.MAX_VALUE);
103     }
104 
105     /**
106      * event
107      * (1)zookeeper链接状态 event.getState()
108      * (2)zookeeper事件类型 event.getType()
109      * (3)zookeeper事件触发的节点路径 event.getPath()
110      */
111     @Override
112     public void process(WatchedEvent event) {
113         try{
114             //已经连接做一件事情
115             if(event.getState()==KeeperState.SyncConnected){
116                 
117                 if(event.getType()==EventType.None&&event.getPath()==null){
118                         zooKeeper.exists("/node_123", true, new IsStatCallBack(), "sxf判断节点是否存在");
119                 }else if(event.getType()==EventType.NodeDataChanged){
120                     //节点数据改变
121                     zooKeeper.exists("/node_123", true, new IsStatCallBack(), "sxf判断节点是否存在");
122                     System.out.println("TestExistsNodeAsyn.process(节点数据改变)");
123                 }else if(event.getType()==EventType.NodeCreated){
124                     //节点被创建
125                     zooKeeper.exists("/node_123", true, new IsStatCallBack(), "sxf判断节点是否存在");
126                     System.out.println("TestExistsNodeAsyn.process(节点被创建)");
127                 }else if(event.getType()==EventType.NodeDeleted){
128                     //节点被删除
129                     zooKeeper.exists("/node_123", true, new IsStatCallBack(), "sxf判断节点是否存在");
130                     System.out.println("TestExistsNodeAsyn.process(节点被删除)");
131                 }
132                 
133             }
134             
135         }catch(Exception e){
136             e.printStackTrace();
137         }
138         
139         
140         
141     }
142     
143     
144     //节点是否存在的异步回调接口实现类
145     static class IsStatCallBack implements AsyncCallback.StatCallback{
146 
147         @Override
148         public void processResult(int rc, String path, Object ctx, Stat stat) {
149             StringBuffer sb=new StringBuffer();
150             sb.append("rc="+rc).append("\n");
151             sb.append("path="+path).append("\n");
152             sb.append("ctx="+ctx).append("\n");
153             sb.append("stat="+stat).append("\n");
154             System.out.println(sb.toString());
155         }
156         
157     }
158     
159 }
View Code

五:客户端获取节点列表测试

  1 package com.yeepay.sxf.getNode;
  2 
  3 import java.io.IOException;
  4 import java.util.List;
  5 
  6 import org.apache.zookeeper.WatchedEvent;
  7 import org.apache.zookeeper.Watcher;
  8 import org.apache.zookeeper.Watcher.Event.EventType;
  9 import org.apache.zookeeper.Watcher.Event.KeeperState;
 10 import org.apache.zookeeper.ZooKeeper;
 11 
 12 /**
 13  * 同步获取节点列表node
 14  * @author sxf
 15  *
 16  */
 17 public class TestGetNodeSyn implements Watcher{
 18 
 19     private static ZooKeeper zooKeeper;
 20     
 21     public static void main(String[] args) throws IOException, InterruptedException {
 22                 //实例化zooKeeper链接
 23                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestGetNodeSyn());
 24                 //创建链接
 25                 Thread.sleep(Integer.MAX_VALUE);
 26     }
 27 
 28     /**
 29      * event
 30      * (1)zookeeper链接状态 event.getState()
 31      * (2)zookeeper事件类型 event.getType()
 32      * (3)zookeeper事件触发的节点路径 event.getPath()
 33      */
 34     @Override
 35     public void process(WatchedEvent event) {
 36         try{
 37             //已经连接做一件事情
 38             if(event.getState()==KeeperState.SyncConnected){
 39                 
 40                 if(event.getType()==EventType.None&&event.getPath()==null){
 41                     //获取制定节点的子节点列表
 42                     //第一参数:节点路径
 43                     //第二个参数:是否需要关注该节点的子节点列表变化。关注:true  不关注:false  (事件监听器)
 44                     List<String> nodesList=zooKeeper.getChildren("/", true);
 45                     System.out.println("/ 下的子节点列表==>"+nodesList);
 46                     /**
 47                      * / 下的子节点列表==>[node_123, node_124, zookeeper]
 48                      */
 49                 }else if(event.getType()==EventType.NodeChildrenChanged){
 50                     //如果节点发生变化,则会触发该事件.当别的地方添加一个节点,则该方法被调用
 51                     System.out.println("TestGetNodeSyn.process()变化的地址:"+event.getPath());//TestGetNodeSyn.process()变化的地址:/
 52                     List<String> nodesList=zooKeeper.getChildren(event.getPath(), true);
 53                     System.out.println("TestGetNodeSyn.process(节点发生变化==>)"+nodesList);
 54                     /**
 55                      * TestGetNodeSyn.process(节点发生变化==>)[node_123, node_124, zookeeper, node_125]
 56                      */
 57                 }
 58                 
 59             }
 60             
 61         }catch(Exception e){
 62             e.printStackTrace();
 63         }
 64         
 65         
 66         
 67     }
 68     
 69     
 70 }
 71 
 72 
 73 
 74 package com.yeepay.sxf.getNode;
 75 
 76 import java.io.IOException;
 77 import java.util.List;
 78 
 79 import org.apache.zookeeper.AsyncCallback;
 80 import org.apache.zookeeper.WatchedEvent;
 81 import org.apache.zookeeper.Watcher;
 82 import org.apache.zookeeper.Watcher.Event.EventType;
 83 import org.apache.zookeeper.Watcher.Event.KeeperState;
 84 import org.apache.zookeeper.ZooKeeper;
 85 import org.apache.zookeeper.data.Stat;
 86 
 87 /**
 88  * 异步获取节点列表
 89  * @author sxf
 90  *
 91  */
 92 public class TestGetNodeAsyn implements Watcher {
 93 
 94     private static ZooKeeper zooKeeper;
 95     
 96     public static void main(String[] args) throws IOException, InterruptedException {
 97         //实例化zooKeeper链接
 98         zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestGetNodeAsyn());
 99         //创建链接
100         Thread.sleep(Integer.MAX_VALUE);
101     }
102 
103     /**
104      * event
105      * (1)zookeeper链接状态 event.getState()
106      * (2)zookeeper事件类型 event.getType()
107      * (3)zookeeper事件触发的节点路径 event.getPath()
108      */
109     
110     @Override
111     public void process(WatchedEvent event) {
112         try{
113             //已经连接做一件事情
114             if(event.getState()==KeeperState.SyncConnected){
115                 
116                 if(event.getType()==EventType.None&&event.getPath()==null){
117                     //获取制定节点的子节点列表
118                     //第一参数:节点路径
119                     //第二个参数:是否需要关注该节点的子节点列表变化。关注:true  不关注:false  (事件监听器)
120                     //第三个参数:异步回调函数
121                     //第四个参数:异步获取传入上下文参数
122                     zooKeeper.getChildren("/", true, new ISChildrenCallback(), "SXF获取子节点列表");
123                     /**    
124                      * / 下的子节点列表==>[node_123, node_124, zookeeper]
125                      */
126                 }else if(event.getType()==EventType.NodeChildrenChanged){
127                     zooKeeper.getChildren(event.getPath(), true, new ISChildrenCallback(), "SXF获取子节点列表");
128                 }
129                 
130             }
131             
132         }catch(Exception e){
133             e.printStackTrace();
134         }
135     }
136     
137     
138     //异步获取子节点列表的回调
139     static class ISChildrenCallback implements AsyncCallback.Children2Callback{
140 
141         @Override
142         public void processResult(int rc, String path, Object ctx,List<String> children, Stat stat) {
143             StringBuffer sb=new StringBuffer();
144             sb.append("rc="+rc).append("\n");
145             sb.append("path="+path).append("\n");
146             sb.append("ctx="+ctx).append("\n");
147             sb.append("children="+children).append("\n");
148             sb.append("stat="+stat).append("\n");
149             System.out.println(sb.toString());
150             /**
151              * rc=0
152              *    path=/
153              *    ctx=SXF获取子节点列表
154              *    children=[node_126, node_127, node_123, node_124, zookeeper, node_125]
155              *    stat=0,0,0,0,0,8,0,0,0,6,4294967354
156              */
157             
158         }
159         
160     }
161     
162 }
View Code

六:客户端获取节点值测试

  1 package com.yeepay.sxf.getNodeValue;
  2 
  3 import java.io.IOException;
  4 
  5 import org.apache.zookeeper.WatchedEvent;
  6 import org.apache.zookeeper.Watcher;
  7 import org.apache.zookeeper.Watcher.Event.EventType;
  8 import org.apache.zookeeper.Watcher.Event.KeeperState;
  9 import org.apache.zookeeper.ZooKeeper;
 10 import org.apache.zookeeper.data.Stat;
 11 
 12 /**
 13  *同步获取节点中存取的值
 14  * @author sxf
 15  *
 16  */
 17 public class TestGetNodeValueSyn implements Watcher{
 18 
 19     private static ZooKeeper zooKeeper;
 20     
 21     
 22     public static void main(String[] args) throws IOException, InterruptedException {
 23                 //实例化zooKeeper链接
 24                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestGetNodeValueSyn());
 25                 //创建链接
 26                 Thread.sleep(Integer.MAX_VALUE);
 27     }
 28 
 29     /**
 30      * event
 31      * (1)zookeeper链接状态 event.getState()
 32      * (2)zookeeper事件类型 event.getType()
 33      * (3)zookeeper事件触发的节点路径 event.getPath()
 34      */
 35     @Override
 36     public void process(WatchedEvent event) {
 37         try{
 38             //已经连接做一件事情
 39             if(event.getState()==KeeperState.SyncConnected){
 40                 
 41                 if(event.getType()==EventType.None&&event.getPath()==null){
 42                     //如果没有权限,可以注册权限
 43                     zooKeeper.addAuthInfo("digest", "shangxiaofei:shangxiaofei".getBytes());
 44                     
 45                     
 46                     //第一个参数:要获取节点存储值的全路径
 47                     //第二个参数:是否注册一个事件监听器
 48                     //第三个参数:一个状态实例
 49                     byte[] nodeValueByte=zooKeeper.getData("/node_128", true, new Stat());
 50                     System.out.println("TestGetNodeValueSyn.process(获取/node_128的值:)"+new String(nodeValueByte));
 51                     //TestGetNodeValueSyn.process(获取/node_127的值:)aaaaaaaa
 52                 }else if(event.getType()==EventType.NodeDataChanged){
 53                     //当关注的节点的值发生了变化则通知
 54                     byte[] nodeValueByte=zooKeeper.getData(event.getPath(), true, new Stat());
 55                     System.out.println("TestGetNodeValueSyn.process(/node_127的值发生了变化:)"+new String(nodeValueByte));
 56                     //TestGetNodeValueSyn.process(/node_127的值发生了变化:)shuihongjie
 57                 }
 58                 
 59             }
 60             
 61         }catch(Exception e){
 62             e.printStackTrace();
 63         }
 64         
 65         
 66         
 67     }
 68     
 69     
 70 }
 71 
 72 
 73 
 74 
 75 package com.yeepay.sxf.getNodeValue;
 76 
 77 import java.io.IOException;
 78 
 79 import org.apache.zookeeper.AsyncCallback;
 80 import org.apache.zookeeper.WatchedEvent;
 81 import org.apache.zookeeper.Watcher;
 82 import org.apache.zookeeper.Watcher.Event.EventType;
 83 import org.apache.zookeeper.Watcher.Event.KeeperState;
 84 import org.apache.zookeeper.ZooKeeper;
 85 import org.apache.zookeeper.data.Stat;
 86 
 87 /**
 88  * 异步获取节点中存取的值
 89  * @author sxf
 90  *
 91  */
 92 public class TestGetNodeValueASyn implements Watcher{
 93 
 94     private static ZooKeeper zooKeeper;
 95     
 96     
 97     public static void main(String[] args) throws IOException, InterruptedException {
 98                 //实例化zooKeeper链接
 99                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestGetNodeValueASyn());
100                 //创建链接
101                 Thread.sleep(Integer.MAX_VALUE);
102     }
103 
104     /**
105      * event
106      * (1)zookeeper链接状态 event.getState()
107      * (2)zookeeper事件类型 event.getType()
108      * (3)zookeeper事件触发的节点路径 event.getPath()
109      */
110     @Override
111     public void process(WatchedEvent event) {
112         try{
113             //已经连接做一件事情
114             if(event.getState()==KeeperState.SyncConnected){
115                 
116                 if(event.getType()==EventType.None&&event.getPath()==null){
117                     //异步获取节点中的值
118                     zooKeeper.getData("/node_127", true, new IsDataCallBack(), "sxf修改");
119                 }else if(event.getType()==EventType.NodeDataChanged){
120                     zooKeeper.getData(event.getPath(), true, new IsDataCallBack(), "sxf修改");
121                 }
122                 
123             }
124             
125         }catch(Exception e){
126             e.printStackTrace();
127         }
128         
129         
130         
131     }
132     
133     
134     //异步获取数据的回调函数
135     static class IsDataCallBack implements  AsyncCallback.DataCallback{
136 
137         @Override
138         public void processResult(int rc, String path, Object ctx, byte[] data,
139                 Stat stat) {
140             StringBuffer sb=new StringBuffer();
141             sb.append("rc="+rc).append("\n");
142             sb.append("path="+path).append("\n");
143             sb.append("ctx="+ctx).append("\n");
144             sb.append("data="+new String(data)).append("\n");
145             sb.append("stat="+stat).append("\n");
146             System.out.println(sb.toString());
147             /**
148              * rc=0
149              *path=/node_127
150              *ctx=sxf修改
151              *data=tianxiabangchang
152              *stat=4294967354,4294967367,1456371531643,1456373368574,4,0,0,0,16,0,4294967354
153              */
154         }
155         
156     }
157     
158 }
View Code

七:客户端修改节点数据测试

  1 package com.yeepay.sxf.updateNodeData;
  2 
  3 import java.io.IOException;
  4 
  5 import org.apache.zookeeper.WatchedEvent;
  6 import org.apache.zookeeper.Watcher;
  7 import org.apache.zookeeper.Watcher.Event.EventType;
  8 import org.apache.zookeeper.Watcher.Event.KeeperState;
  9 import org.apache.zookeeper.ZooKeeper;
 10 import org.apache.zookeeper.data.Stat;
 11 
 12 /**
 13  *同步修改节点数据
 14  * @author sxf
 15  *
 16  */
 17 public class TestUpdateNodeValueSyn implements Watcher{
 18 
 19     private static ZooKeeper zooKeeper;
 20     
 21     
 22     public static void main(String[] args) throws IOException, InterruptedException {
 23                 //实例化zooKeeper链接
 24                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestUpdateNodeValueSyn());
 25                 //创建链接
 26                 Thread.sleep(Integer.MAX_VALUE);
 27     }
 28 
 29     /**
 30      * event
 31      * (1)zookeeper链接状态 event.getState()
 32      * (2)zookeeper事件类型 event.getType()
 33      * (3)zookeeper事件触发的节点路径 event.getPath()
 34      */
 35     @Override
 36     public void process(WatchedEvent event) {
 37         try{
 38             //已经连接做一件事情
 39             if(event.getState()==KeeperState.SyncConnected){
 40                 
 41                 if(event.getType()==EventType.None&&event.getPath()==null){
 42                     //第一个参数:要修改的节点的全路径
 43                     //第二个参数:要修改的节点的数据内容
 44                     //第三个参数:版本号
 45                     Stat stat=zooKeeper.setData("/node_124", "sxfupdatenodedata".getBytes(), -1);
 46                     System.out.println("TestUpdateNodeValueSyn.process()"+stat);
 47                 }
 48                 
 49             }
 50             
 51         }catch(Exception e){
 52             e.printStackTrace();
 53         }
 54         
 55         
 56         
 57     }
 58     
 59     
 60 }
 61 
 62 
 63 package com.yeepay.sxf.updateNodeData;
 64 
 65 import java.io.IOException;
 66 
 67 import org.apache.zookeeper.AsyncCallback;
 68 import org.apache.zookeeper.WatchedEvent;
 69 import org.apache.zookeeper.Watcher;
 70 import org.apache.zookeeper.Watcher.Event.EventType;
 71 import org.apache.zookeeper.Watcher.Event.KeeperState;
 72 import org.apache.zookeeper.ZooKeeper;
 73 import org.apache.zookeeper.data.Stat;
 74 
 75 /**
 76  *异步修改节点数据
 77  * @author sxf
 78  *
 79  */
 80 public class TestUpdateNodeValueAsyn implements Watcher{
 81 
 82     private static ZooKeeper zooKeeper;
 83     
 84     
 85     public static void main(String[] args) throws IOException, InterruptedException {
 86                 //实例化zooKeeper链接
 87                 zooKeeper=new ZooKeeper("10.151.30.75:2181", 5000,new TestUpdateNodeValueAsyn());
 88                 //创建链接
 89                 Thread.sleep(Integer.MAX_VALUE);
 90     }
 91 
 92     /**
 93      * event
 94      * (1)zookeeper链接状态 event.getState()
 95      * (2)zookeeper事件类型 event.getType()
 96      * (3)zookeeper事件触发的节点路径 event.getPath()
 97      */
 98     @Override
 99     public void process(WatchedEvent event) {
100         try{
101             //已经连接做一件事情
102             if(event.getState()==KeeperState.SyncConnected){
103                 
104                 if(event.getType()==EventType.None&&event.getPath()==null){
105                     //第一个参数:要修改的节点的全路径
106                     //第二个参数:要修改的节点的数据内容
107                     //第三个参数:版本号
108                     zooKeeper.setData("/node_124", "yangkai".getBytes(), -1, new ISupdateDataCallBack(), "sxf修改节点数据");
109                 }
110                 
111             }
112             
113         }catch(Exception e){
114             e.printStackTrace();
115         }
116         
117         
118         
119     }
120     
121     /**
122      * 异步修改节点数据的回调接口的实现
123      * @author sxf
124      *
125      */
126     static class ISupdateDataCallBack implements AsyncCallback.StatCallback{
127 
128         @Override
129         public void processResult(int rc, String path, Object ctx, Stat stat) {
130             StringBuffer sb=new StringBuffer();
131             sb.append("rc="+rc).append("\n");
132             sb.append("path="+path).append("\n");
133             sb.append("ctx="+ctx).append("\n");
134             sb.append("stat="+stat).append("\n");
135             System.out.println(sb.toString());
136         }
137         
138     }
139 }
View Code

 

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
23天前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
19 3
|
2天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
4天前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
4天前
|
存储 安全 Java
说说Java 8 引入的Stream API
说说Java 8 引入的Stream API
8 0
|
4天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【4月更文挑战第16天】本文将介绍Java 8中的两个重要新特性:Lambda表达式和Stream API。Lambda表达式是Java 8中引入的一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁、易读。Stream API是Java 8中引入的一种新的数据处理方式,它允许我们以声明式的方式处理数据,从而使代码更加简洁、高效。本文将通过实例代码详细讲解这两个新特性的使用方法和优势。
|
5天前
|
安全 Java API
RESTful API设计与实现:Java后台开发指南
【4月更文挑战第15天】本文介绍了如何使用Java开发RESTful API,重点是Spring Boot框架和Spring MVC。遵循无状态、统一接口、资源标识和JSON数据格式的设计原则,通过创建控制器处理HTTP请求,如示例中的用户管理操作。此外,文章还提及数据绑定、验证、异常处理和跨域支持。最后,提出了版本控制、安全性、文档测试以及限流和缓存的最佳实践,以确保API的稳定、安全和高效。
|
8天前
|
存储 Java 关系型数据库
掌握Java 8 Stream API的艺术:详解流式编程(一)
掌握Java 8 Stream API的艺术:详解流式编程
37 1
|
8天前
|
存储
ZooKeeper客户端常用命令
ZooKeeper客户端常用命令
22 1
|
17天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
27天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
90 3