编程语言
首页 > 编程语言> > java客户端的使用

java客户端的使用

作者:互联网

前面介绍了zk指令的使用,这里说一下java客户端中怎么使用这些指令

[plain] view plaincopy  
  1. <dependency>  
  2. <groupId>org.apache.zookeeper</groupId>  
  3. <artifactId>zookeeper</artifactId>  
  4. <version>3.5.5</version>  
  5. </dependency>  
  6. <dependency>  
  7. <groupId>junit</groupId>  
  8. <artifactId>junit</artifactId>  
  9. <version>4.12</version>  
  10. </dependency>  

 

客户端创建参数:

1.初始化连接:org.apache.zookeeper.ZooKeeper,实例化该类之后将会自动与ZK建立连接。构造参数说明如下:

参数名称

类型

说明

connectString

String

连接串,包括ip+端口 ,集群模式下用逗号隔开

192.168.0.101:2181,192.168.0.67:2181

sessionTimeout

int

会话超时时间,该值不能超过服务端所设置的

minSessionTimeout 和maxSessionTimeout

watcher

Watcher

会话监听器,服务端事件将会触该监听

sessionId

long

自定义会话ID

sessionPasswd

byte[]

会话密码

canBeReadOnly

boolean

该连接是否为只读的

hostProvider

HostProvider

服务端地址提供者,指示客户端如何选择某个服务来调用,默认采用StaticHostProvider实现

 

2. org.apache.zookeeper.ZooKeeper#create() 创建节点 创建节点的时候需要注意设置ACL权限,五个权限位:

    int READ = 1 << 0;

    int WRITE = 1 << 1;

    int CREATE = 1 << 2;

    int DELETE = 1 << 3;

    int ADMIN = 1 << 4;

    int ALL = READ | WRITE | CREATE | DELETE | ADMIN;

3.org.apache.zookeeper.ZooKeeper#getData() 查看节点数据/添加数据变化监听

4.org.apache.zookeeper.ZooKeeper#getChildren() 查看子节点/添加子节点变化监听

 

代码demo:

[plain] view plaincopy  
  1. package com.nijunyang.zookeeper.demo;  
  2.   
  3. import org.apache.zookeeper.*;  
  4. import org.apache.zookeeper.data.ACL;  
  5. import org.apache.zookeeper.data.Id;  
  6. import org.apache.zookeeper.data.Stat;  
  7. import org.junit.Before;  
  8. import org.junit.Test;  
  9.   
  10. import java.io.IOException;  
  11. import java.util.ArrayList;  
  12. import java.util.List;  
  13.   
  14. /** 
  15. * Description: 
  16. * Created by nijunyang on 2020/10/27 21:36 
  17. */  
  18. public class ZkClientDataChange {  
  19.   
  20. ZooKeeper zkClient;  
  21.   
  22. @Before  
  23. public void before() throws IOException {  
  24. //集群用,分割  
  25. String connectString = "192.168.0.67:2181";  
  26. zkClient = new ZooKeeper(connectString, 40000, new Watcher() {  
  27. @Override  
  28. public void process(WatchedEvent event) {  
  29. System.out.println(event.getPath());  
  30. System.out.prin  
  31. ad8  
  32. tln(event);  
  33. }  
  34. });  
  35. }  
  36.   
  37. //获取数据  
  38. @Test  
  39. public void getData1() throws KeeperException, InterruptedException {  
  40. byte[] data = zkClient.getData("/njy", false, null);  
  41. System.out.println(new String(data));  
  42. }  
  43.   
  44. //添加监听  
  45. @Test  
  46. public void getData2() throws KeeperException, InterruptedException {  
  47. //直接调用初始化的监听  
  48. byte[] data = zkClient.getData("/njy", true, null);  
  49. System.out.println(new String(data));  
  50. Thread.sleep(Integer.MAX_VALUE);  
  51. }  
  52.   
  53. @Test  
  54. public void getData3() throws KeeperException, InterruptedException {  
  55. //Stat 会填充带回来  
  56. Stat stat = new Stat();  
  57. //添加自定义监听  
  58. byte[] data = zkClient.getData("/njy", new Watcher() {  
  59. @Override  
  60. public void process(WatchedEvent event) {  
  61. try {  
  62. //重复添加监听  
  63. zkClient.getData(event.getPath(), this, null);  
  64. } catch (Exception e) {  
  65. e.printStackTrace();  
  66. }  
  67. System.out.println(event.getPath());  
  68. }  
  69. }, stat);  
  70. System.out.println(stat);  
  71. Thread.sleep(Long.MAX_VALUE);  
  72. }  
  73.   
  74. //带回调  
  75. @Test  
  76. public void getData4() throws KeeperException, InterruptedException {  
  77. zkClient.getData("/njy", false, new AsyncCallback.DataCallback() {  
  78. @Override  
  79. public void processResult(int rc, java.lang.String path, Object ctx, byte[] data, Stat stat) {  
  80. System.out.println(new String(data));  
  81. System.out.println(stat);  
  82. }  
  83. }, "");  
  84. Thread.sleep(Long.MAX_VALUE);  
  85. }  
  86.   
  87. //获取子节点  
  88. @Test  
  89. public void getChild() throws KeeperException, InterruptedException {  
  90. List<String> children = zkClient.getChildren("/njy", false);  
  91. children.stream().forEach(System.out::println);  
  92. }  
  93.   
  94. //监听子节点变化  
  95. @Test  
  96. public void getChild2() throws KeeperException, InterruptedException {  
  97. List<String> children = zkClient.getChildren("/njy", event -> {  
  98. System.out.println(event.getPath());  
  99. try {  
  100. zkClient.getChildren(event.getPath(), false);  
  101. } catch (KeeperException e) {  
  102. e.printStackTrace();  
  103. } catch (InterruptedException e) {  
  104. e.printStackTrace();  
  105.   
  106. ad8  
  107. }  
  108. });  
  109. children.stream().forEach(System.out::println);  
  110. Thread.sleep(Long.MAX_VALUE);  
  111. }  
  112.   
  113. //持续监听  
  114. @Test  
  115. public void getChild3() throws KeeperException, InterruptedException {  
  116. Stat stat = new Stat();  
  117. List<String> children = zkClient.getChildren("/njy", new Watcher() {  
  118. @Override  
  119. public void process(WatchedEvent event) {  
  120. System.out.println(event.getPath());  
  121. try {  
  122. zkClient.getChildren(event.getPath(),this);  
  123. } catch (KeeperException e) {  
  124. e.printStackTrace();  
  125. } catch (InterruptedException e) {  
  126. e.printStackTrace();  
  127. }  
  128. }  
  129. }, stat);  
  130. children.stream().forEach(System.out::println);  
  131. Thread.sleep(Long.MAX_VALUE);  
  132. }  
  133.   
  134. //创建节点  
  135. @Test  
  136. public void createNode() throws KeeperException, InterruptedException {  
  137. List<ACL> list = new ArrayList<>();  
  138. //        int perm = ZooDefs.Perms.ADMIN | ZooDefs.Perms.READ;//cdwra  
  139. //        int READ = 1 << 0;  
  140. //        int WRITE = 1 << 1;  
  141. //        int CREATE = 1 << 2;  
  142. //        int DELETE = 1 << 3;  
  143. //        int ADMIN = 1 << 4;  
  144. //        int ALL = READ | WRITE | CREATE | DELETE | ADMIN;  
  145. int perm = ZooDefs.Perms.ALL;  
  146. //ACL权限  
  147. ACL acl = new ACL(perm, new Id("world", "anyone"));  
  148. //        ACL acl2 = new ACL(perm, new Id("ip", "192.168.0.67"));  
  149. //        ACL acl3 = new ACL(perm, new Id("ip", "192.168.0.101"));  
  150. list.add(acl);  
  151. //        list.add(acl2);  
  152. //        list.add(acl3);  
  153. zkClient.create("/njy/njyn1", "hello".getBytes(), list, CreateMode.PERSISTENT);  
  154. }  
  155. }  

标签:java,int,void,System,使用,zkClient,new,public,客户端
来源: https://www.cnblogs.com/xy5552/p/14094146.html