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

  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:

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

Zookeeper(3)---java客户端的使用的更多相关文章

  1. Zookeeper的java客户端API使用方法(五)

    前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...

  2. ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用

    zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...

  3. zookeeper的Java客户端API

    zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API.这里主要记录下JAVA客户端API的使用. 1.创建会话 客户端可以通过创建一个ZooKeeper实 ...

  4. 02.ZooKeeper的Java客户端使用

    1.ZooKeeper常用客户端比较 1.ZooKeeper常用客户端     zookeeper的常用客户端有3种,分别是:zookeeper原生的.Apache Curator.开源的zkclie ...

  5. Zookeeper 的 java 客户端都有哪些?

    java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator.

  6. [转载] ZooKeeper的Java客户端API

    转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...

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

    一:客户端链接测试 package com.yeepay.sxf.createConnection; import java.io.IOException; import org.apache.zoo ...

  8. ZooKeeper:Java客户端网络处理

    了解ZooKeeper客户端的实现,对于使用ZooKeeper的客户端非常重要. 通过对客户端源码的阅读,了解了如下信息: 创建ZooKeeper对象时,应会创建一个ClientCnxn(代表了客户端 ...

  9. 12. ZooKeeper之Java客户端API使用—创建会话。

    转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...

  10. 13.Zookeeper的java客户端API使用方法

    转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027

随机推荐

  1. 深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析

    本文分享自华为云社区<深入理解HarmonyOS UIAbility:生命周期.WindowStage与启动模式探析>,作者:柠檬味拥抱. UIAbility组件概述 UIAbility组 ...

  2. lua完整学习笔记

    lua注释 -- 单行注释 --[[ 多行注释 ]]-- lua数据结构 nil          无效值与Java的Null类似,但是在条件表示中是false boolean      布尔值,tu ...

  3. Vue重用组件

    1.是什么? 这里主要是简单入门使用一下,复杂高阶的用法笔者暂时还没了解到 Vue重用组件是指可以被多个Vue实例重复使用的组件.这些组件可以包含自定义的状态和事件处理程序,并且可以在整个应用程序中共 ...

  4. 记录一些JDK的新特性~持续更新

    1.record快速定义类 @Test public void testRecord() { /** * JDK16新特性 * * @param start * @param end */ recor ...

  5. 解析$nextTick魔力,为啥大家都爱它?

    1.为什么需要使用$nextTick? 首先我们来看看官方对于$nextTick的定义: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 由于vu ...

  6. Cisco 交换机利用CDP数据自动绘制网络拓扑图[drawio]-实践

    进行网络运维,必须对网络拓扑情况进行详细的掌握,但是网络改动后,更新网络拓扑比较繁琐,维护人员容易懈怠,久而久之,通过人工绘制的网络拓扑很容易与现有网络出现偏差. 现在,可以通过python 丰富的库 ...

  7. navicat连接服务器mysql

    navicat连接服务器mysql 第一步:配置防火墙 连接服务器的mysql数据库,我们首先需要在服务器上放行3306端口(MySQL服务对应的端口),进入服务器管理页面防火墙,点击添加规则,放行3 ...

  8. 构建 dotnet&vue 应用镜像->推送到 Nexus 仓库->部署为 k8s 服务实践

    前言 前面分享了 k8s 的部署安装,本篇来点实操,将会把一个 .net core + vue 的项目(zhontai),打包构建成 docker 镜像,推送到 nexus 镜像仓库,并部署到 k8s ...

  9. 在centos7.9中 修改docker0 的网卡默认IP地址

    docker0网卡的默认IP地址为172.17.0.1/16 因此很可能会与企业网中的业务地址冲突,为了解决这个问题,必须修改docker0的网卡配置,操作如下 1.查看网卡docker0的默认地址  ...

  10. WinRM服务应用及配置说明

    一.什么是winRM服务 1.1.winRM服务介绍 Windows远程管理(WinRM)服务是Windows Server 2003 R2以上版本中一种新式的方便远程管理的服务.通过WinRM服务, ...