zookeeper快速入门四:在java客户端中操作zookeeper

系列文章:

zookeeper快速入门一:zookeeper安装与启动-CSDN博客

zookeeper快速入门二:zookeeper基本概念-CSDN博客

zookeeper快速入门三:zookeeper的基本操作


先启动zookeeper服务端。

在maven引入zookeeper依赖。

<dependency><groupId>org.apache.hadoop</groupId><artifactId>zookeeper</artifactId><version>3.3.1</version>
</dependency>

org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话。它提供了以下 所示几类主要方法。 

 

在java中启动客户端,注册一个watcher监听链接的建立。

import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;public class ZookeeperClient {private static final String connectString = "127.0.0.1:2181";private static final int sessionTimeout = 2000;private static ZooKeeper zkClient = null;public void init() throws Exception {zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {@Overridepublic void process(WatchedEvent event) {// 收到事件通知后的回调函数(应该是我们自己的事件处理逻辑)System.out.println("zookeeper链接建立");}});}
}

在main方法里测试我们的init方法,用Thread.sleep方法等待zookeeper连接创建,不然在zookeeper客户端建立连接之前主线程就已经退出。

    public static void main(String[] args)throws Exception{new ZookeeperClient().init();Thread.sleep(5000);}

控制台输出:

接下来我们创建一个名为“/java”的节点,节点数据为“data”,ZooDefs.Ids.OPEN_ACL_UNSAFE的意思是不节点能被所有人访问,CreateMode.PERSISTENT:节点的类型为持久节点。

    public void createZnode()throws Exception{zkClient.create("/java", "data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}

判断节点是否存在,false代表不注册监听事件,如果是true,则注册我们在new zookeeper方法里面传递的watcher。

    public void testExist() throws Exception{Stat stat = zkClient.exists("/java", false);System.out.println(stat==null?"节点不存在":"节点存在");}

测试一下我们的方法。

    public static void main(String[] args)throws Exception{new ZookeeperClient().init();Thread.sleep(5000);new ZookeeperClient().createZnode();new ZookeeperClient().testExist();}

 获取节点的数据。false和上面exists方法参数含义一样,表示不注册连接建立时的watcher,第三个stat对象则存储了除了节点数据之外的其他信息,如czxid、mzxid等。如果为null则表示不保存节点的这些信息。

    public void getNodeData()throws Exception{byte[] res = zkClient.getData("/java",false,new Stat());System.out.println(new String(res));}

同样测试我们的方法。

    public static void main(String[] args)throws Exception{new ZookeeperClient().init();Thread.sleep(3000);new ZookeeperClient().getNodeData();}

 获取ACL控制列表

    public void getACl()throws Exception{List<ACL> res = zkClient.getACL("/java",new Stat());for(ACL acl : res){System.out.println(acl.getId().toString()+acl.getPerms());}}

测试:

    public static void main(String[] args)throws Exception{new ZookeeperClient().init();Thread.sleep(3000);new ZookeeperClient().getACl();}

在/java下创建子节点,获取子节点列表。

    public void createChildZnode()throws Exception{zkClient.create("/java/child", "child data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);zkClient.create("/java/child2", "child2 data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}public void getChildNode()throws Exception{List<String> res = zkClient.getChildren("/java",false);for(String s : res){System.out.println(s);}}

测试:

    public static void main(String[] args)throws Exception{new ZookeeperClient().init();Thread.sleep(3000);new ZookeeperClient().createChildZnode();new ZookeeperClient().getChildNode();}

全部代码如下:

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Stat;import java.util.List;public class ZookeeperClient {private static final String connectString = "127.0.0.1:2181";private static final int sessionTimeout = 2000;private static ZooKeeper zkClient = null;public void init() throws Exception {zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {@Overridepublic void process(WatchedEvent event) {// 收到事件通知后的回调函数(应该是我们自己的事件处理逻辑)System.out.println("zookeeper链接建立");}});}public void createZnode()throws Exception{zkClient.create("/java", "data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}public void createChildZnode()throws Exception{zkClient.create("/java/child", "child data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);zkClient.create("/java/child2", "child2 data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);}public void getChildNode()throws Exception{List<String> res = zkClient.getChildren("/java",false);for(String s : res){System.out.println(s);}}public void testExist() throws Exception{Stat stat = zkClient.exists("/java", false);System.out.println(stat==null?"节点不存在":"节点存在");}public void getNodeData()throws Exception{byte[] res = zkClient.getData("/java",false,new Stat());System.out.println(new String(res));}public void getACl()throws Exception{List<ACL> res = zkClient.getACL("/java",new Stat());for(ACL acl : res){System.out.println(acl.getId().toString()+acl.getPerms());}}public static void main(String[] args)throws Exception{new ZookeeperClient().init();Thread.sleep(3000);new ZookeeperClient().createChildZnode();new ZookeeperClient().getChildNode();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[java基础揉碎]Object类详解

目录 equals方法: hashCode: toString: finalize: equals方法: 和equals对比 1.: 既可以判断基本类型&#xff0c;又可以判断引用类型 2.: 如果判断基本类型&#xff0c;判断的是值是否相等。示例: int i10; double d10.0; 3.:如果判断引用类型&#xff0c;判断的是地址是…

Linux 16个常用脚本(初级)练习

&#xff08;1&#xff09;编写脚本&#xff1a;提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户 #!/bin/bash # 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户 # 不输入账户名,则提示必须输入账户名并退出脚本;如果用…

MySQL语法分类 DQL(6)分页查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

reloading,一个很实用的Python库!

Python是一门非常流行的编程语言&#xff0c;它的广泛应用和丰富的第三方库使得开发者们能够轻松完成各种任务。reloading是Python中一个强大的库&#xff0c;它能够在程序运行时重新加载修改过的模块&#xff0c;为开发者提供了便利和灵活性。本文将全面介绍reloading库&#…

【STM32 定时器(二)TIM 输入捕获PWM 总结】

STM32定时器之输入捕获总结 OC介绍PWM介绍PWM初始化代码部分开启时钟配置时基单元配置CCR配置GPIO配置复用和重定义功能 开启定时器代码实现 &#xff1a;实现呼吸灯 OC介绍 PWM介绍 PWM参数计算 分辨率越细&#xff0c;分的分量越精细&#xff0c;越稳定&#xff0c;假如它为…

Kafka(十)安全

目录 Kafka安全1 安全协议1.1 PALINTEXT1.2 SSL1.2.1 生成服务端证书1.2.2 生成客户端证书1.2.3 修改配置listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.namesecurity.inter.broker.protocolcontrol.plane.listener.name 1.3 SASL_PLAINT…

面向对象8

面向对象8 main()方法的剖析 public static void main(String args[]){} 1、理解1&#xff1a;看做是一个普通的静态方法 理解2&#xff1a;看做是程序的入口&#xff0c;格式是固定的。 2、与控制台交互 如何从键盘获取数据&#xff1f; 方式1&#xff1a;使用Scanner 方…

网络学习:IPV6地址详解

目录 前言&#xff1a; 一、IPV6的由来 二、什么是IPV6地址&#xff1f; IPV6地址结构&#xff1a; 前言&#xff1a; IPV6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议的第二代标准协议&#xff0c;也被称为IPng&#xff08;IP Next Generation&…

ELK之使用Filebeat插件收集日志到Logstash

对于Springboot项目接入ELK非常方便&#xff0c;对于非maven&#xff0c;非Spring项目来说就比较复杂&#xff0c;这个时候我们就可以使用Filebeat插件还完成日志的收集发送工作。 Filebeat介绍 Filebeat是用于转发和收集数据的轻量级工具&#xff0c;Filebeat可以监视指定的…

内存泄露与解决

什么是内存泄漏 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在 哪些操作会造成内存泄漏&#xff1f; 1、垃圾回收器定期扫描对象&#xff0c;并计算引用了每个对象的其他对象的数量。如果一个对象的 引用数量为 0&#xff08;没有其他对象引用过该对象&#xff09;&…

通过串口中断的方式进行ASR-01S模块与STM32通信(问题与解决)

前言&#xff1a; 最近在做一个智能家居的项目&#xff0c;需要实现语音控制的功能&#xff0c;于是我选用了ASR-01S模块与STM32通信&#xff0c;这个模块最大的好处在于有配套的编程软件和语音库&#xff0c;不用自己训练且编程简单&#xff08;少儿编程的程度&#xff09;。…

LEETCODE LCS 03. 主题空间

题目描述如上&#xff0c;这个题主要运用了DFS的思想&#xff0c;同时走过的路径标记为6&#xff0c;即可在后续的遍历中过滤掉重复的元素&#xff0c;其他则类似边界条件的判断和题目条件的判断&#xff0c;求最大值&#xff0c;只需要一次遍历中累加对比每一次得即可。 模板&…

数据结构与算法-树-二分搜索树(一)

二分搜索树 今天我们尝试构建一颗二分搜索树&#xff0c;很多同学只有理论&#xff0c;并没有对树有其编码实践。通过一步步的实现一颗二分搜索树&#xff0c;加深对数据结构树的理解。 二分搜索树&#xff0c;又名二分排序树&#xff0c;有人也叫它二分查找树。 特点 二分搜索…

最强AI换脸工具Rope使用教程,Rope整合包下载【全网最全安装步骤】

Rope的汉化整合包&#xff08;包含模型&#xff09;以及下面教程所涉及到的所有安装包我都打包好了&#xff0c;需要的小伙伴可以关注文章底部公众号&#xff0c;回复关键词【rope】获取。 AI换脸软件简介必读 Rope 是一个免费开源的 AI 换脸软件&#xff0c;它具有图形化界面…

Centos启用rc-local服务

Centos启用rc-local服务 简介问题分析解决方法启动并查看状态 简介 大多时候我们可以在/etc/rc.d/rc.local中写一些命令来实现随着服务器的启动(重启)运行自己的程序或服务&#xff0c;但是配置后无法启动&#xff0c;查看了下rc-local.service服务状态显示未启动。 [rootmas…

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

如何创建用户流(User Flow):分步指南

原文作者&#xff1a;Camren Browne&#xff0c;CareerFoundry 翻译&#xff1a;数字营销工兵 (sources: 图片来源于网络&#xff09; 用户流(User Flow)是当今用户体验行业中最有用但被误解的工具之一。资深设计师经常避开它们&#xff0c;而初级设计师则很难抓住它们。 事…

炸裂!全球首个AI程序员!

近年来&#xff0c;人工智能&#xff08;AI&#xff09;在多个领域取得了显著进展&#xff0c;不断拓展其能力边界。一个引人注目的突破是全球首个AI程序员——Devin的诞生。 这一创新不仅展示了AI技术的快速进步&#xff0c;而且对软件开发领域和未来的工作场景产生了深远的影…

关于ffmpeg height not divisible by 2的错误

在我们线上视频生产过程中&#xff0c;我们用ffmpeg对视频做了resize&#xff0c;讲原有的分辨率resize到1280p&#xff0c;使用了参数 -vf "scale1280:-1"&#xff0c;作用是将原始视频宽度缩放成1280&#xff0c;-1是指高度等比例缩放。 之前一直运行的好好的&…

网络基础知识-操作系统作用+进程管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 本章知识和计算机…