Zookeeper(3)---java客户端的使用
前面介绍了zk指令的使用,这里说一下java客户端中怎么使用这些指令
- <dependency>
- <groupId>org.apache.zookeeper</groupId>
- <artifactId>zookeeper</artifactId>
- <version>3.5.5</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- </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:
- package com.nijunyang.zookeeper.demo;
- import org.apache.zookeeper.*;
- import org.apache.zookeeper.data.ACL;
- import org.apache.zookeeper.data.Id;
- import org.apache.zookeeper.data.Stat;
- import org.junit.Before;
- import org.junit.Test;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * Description:
- * Created by nijunyang on 2020/10/27 21:36
- */
- public class ZkClientDataChange {
- ZooKeeper zkClient;
- @Before
- public void before() throws IOException {
- //集群用,分割
- String connectString = "192.168.0.67:2181";
- zkClient = new ZooKeeper(connectString, 40000, new Watcher() {
- @Override
- public void process(WatchedEvent event) {
- System.out.println(event.getPath());
- System.out.println(event);
- }
- });
- }
- //获取数据
- @Test
- public void getData1() throws KeeperException, InterruptedException {
- byte[] data = zkClient.getData("/njy", false, null);
- System.out.println(new String(data));
- }
- //添加监听
- @Test
- public void getData2() throws KeeperException, InterruptedException {
- //直接调用初始化的监听
- byte[] data = zkClient.getData("/njy", true, null);
- System.out.println(new String(data));
- Thread.sleep(Integer.MAX_VALUE);
- }
- @Test
- public void getData3() throws KeeperException, InterruptedException {
- //Stat 会填充带回来
- Stat stat = new Stat();
- //添加自定义监听
- byte[] data = zkClient.getData("/njy", new Watcher() {
- @Override
- public void process(WatchedEvent event) {
- try {
- //重复添加监听
- zkClient.getData(event.getPath(), this, null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println(event.getPath());
- }
- }, stat);
- System.out.println(stat);
- Thread.sleep(Long.MAX_VALUE);
- }
- //带回调
- @Test
- public void getData4() throws KeeperException, InterruptedException {
- zkClient.getData("/njy", false, new AsyncCallback.DataCallback() {
- @Override
- public void processResult(int rc, java.lang.String path, Object ctx, byte[] data, Stat stat) {
- System.out.println(new String(data));
- System.out.println(stat);
- }
- }, "");
- Thread.sleep(Long.MAX_VALUE);
- }
- //获取子节点
- @Test
- public void getChild() throws KeeperException, InterruptedException {
- List<String> children = zkClient.getChildren("/njy", false);
- children.stream().forEach(System.out::println);
- }
- //监听子节点变化
- @Test
- public void getChild2() throws KeeperException, InterruptedException {
- List<String> children = zkClient.getChildren("/njy", event -> {
- System.out.println(event.getPath());
- try {
- zkClient.getChildren(event.getPath(), false);
- } catch (KeeperException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- });
- children.stream().forEach(System.out::println);
- Thread.sleep(Long.MAX_VALUE);
- }
- //持续监听
- @Test
- public void getChild3() throws KeeperException, InterruptedException {
- Stat stat = new Stat();
- List<String> children = zkClient.getChildren("/njy", new Watcher() {
- @Override
- public void process(WatchedEvent event) {
- System.out.println(event.getPath());
- try {
- zkClient.getChildren(event.getPath(),this);
- } catch (KeeperException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }, stat);
- children.stream().forEach(System.out::println);
- Thread.sleep(Long.MAX_VALUE);
- }
- //创建节点
- @Test
- public void createNode() throws KeeperException, InterruptedException {
- List<ACL> list = new ArrayList<>();
- // int perm = ZooDefs.Perms.ADMIN | ZooDefs.Perms.READ;//cdwra
- // 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;
- int perm = ZooDefs.Perms.ALL;
- //ACL权限
- ACL acl = new ACL(perm, new Id("world", "anyone"));
- // ACL acl2 = new ACL(perm, new Id("ip", "192.168.0.67"));
- // ACL acl3 = new ACL(perm, new Id("ip", "192.168.0.101"));
- list.add(acl);
- // list.add(acl2);
- // list.add(acl3);
- zkClient.create("/njy/njyn1", "hello".getBytes(), list, CreateMode.PERSISTENT);
- }
- }
Zookeeper(3)---java客户端的使用的更多相关文章
- Zookeeper的java客户端API使用方法(五)
前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...
- zookeeper的Java客户端API
zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API.这里主要记录下JAVA客户端API的使用. 1.创建会话 客户端可以通过创建一个ZooKeeper实 ...
- 02.ZooKeeper的Java客户端使用
1.ZooKeeper常用客户端比较 1.ZooKeeper常用客户端 zookeeper的常用客户端有3种,分别是:zookeeper原生的.Apache Curator.开源的zkclie ...
- Zookeeper 的 java 客户端都有哪些?
java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator.
- [转载] ZooKeeper的Java客户端API
转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...
- 六:ZooKeeper的java客户端api的使用
一:客户端链接测试 package com.yeepay.sxf.createConnection; import java.io.IOException; import org.apache.zoo ...
- ZooKeeper:Java客户端网络处理
了解ZooKeeper客户端的实现,对于使用ZooKeeper的客户端非常重要. 通过对客户端源码的阅读,了解了如下信息: 创建ZooKeeper对象时,应会创建一个ClientCnxn(代表了客户端 ...
- 12. ZooKeeper之Java客户端API使用—创建会话。
转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...
- 13.Zookeeper的java客户端API使用方法
转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027
随机推荐
- 深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析
本文分享自华为云社区<深入理解HarmonyOS UIAbility:生命周期.WindowStage与启动模式探析>,作者:柠檬味拥抱. UIAbility组件概述 UIAbility组 ...
- lua完整学习笔记
lua注释 -- 单行注释 --[[ 多行注释 ]]-- lua数据结构 nil 无效值与Java的Null类似,但是在条件表示中是false boolean 布尔值,tu ...
- Vue重用组件
1.是什么? 这里主要是简单入门使用一下,复杂高阶的用法笔者暂时还没了解到 Vue重用组件是指可以被多个Vue实例重复使用的组件.这些组件可以包含自定义的状态和事件处理程序,并且可以在整个应用程序中共 ...
- 记录一些JDK的新特性~持续更新
1.record快速定义类 @Test public void testRecord() { /** * JDK16新特性 * * @param start * @param end */ recor ...
- 解析$nextTick魔力,为啥大家都爱它?
1.为什么需要使用$nextTick? 首先我们来看看官方对于$nextTick的定义: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 由于vu ...
- Cisco 交换机利用CDP数据自动绘制网络拓扑图[drawio]-实践
进行网络运维,必须对网络拓扑情况进行详细的掌握,但是网络改动后,更新网络拓扑比较繁琐,维护人员容易懈怠,久而久之,通过人工绘制的网络拓扑很容易与现有网络出现偏差. 现在,可以通过python 丰富的库 ...
- navicat连接服务器mysql
navicat连接服务器mysql 第一步:配置防火墙 连接服务器的mysql数据库,我们首先需要在服务器上放行3306端口(MySQL服务对应的端口),进入服务器管理页面防火墙,点击添加规则,放行3 ...
- 构建 dotnet&vue 应用镜像->推送到 Nexus 仓库->部署为 k8s 服务实践
前言 前面分享了 k8s 的部署安装,本篇来点实操,将会把一个 .net core + vue 的项目(zhontai),打包构建成 docker 镜像,推送到 nexus 镜像仓库,并部署到 k8s ...
- 在centos7.9中 修改docker0 的网卡默认IP地址
docker0网卡的默认IP地址为172.17.0.1/16 因此很可能会与企业网中的业务地址冲突,为了解决这个问题,必须修改docker0的网卡配置,操作如下 1.查看网卡docker0的默认地址 ...
- WinRM服务应用及配置说明
一.什么是winRM服务 1.1.winRM服务介绍 Windows远程管理(WinRM)服务是Windows Server 2003 R2以上版本中一种新式的方便远程管理的服务.通过WinRM服务, ...