Zookeeper(五)JAVA API

zookeeper API操作,基本命令及报错 API ZooKeeper API 中,有两个包是我们经常打交道的,分别是 org.apache.zookeeper, org.apache.zookeeper.data 。前一个包提供了一些API操作zk,例如对节点node增删改查,后一个包定义了一些实体类,例如对zk 节点进行权限控制的ACL类、Id类等。zk常用的API如下。 创建会话 ZooKeeper(String conn... 阅读详情

org.apache.zookeeper.ZooKeeper类 主要方法列表

方法名称 描述
String create(final String path, byte data[], List acl, CreateMode createMode)

创建一个znode节点,

参数: 路径、 znode内容,ACL(访问控制列表)、 znode创建类型

void delete(final String path, int version)

删除一个znode节点,

参数: 路径、版本号;如果版本号与znode的版本号不一致,将无法删除,是一种乐观加锁机制;如果将版本号设置为-1,不会去检测版本,直接删除;

Stat exists(final String path, Watcher watcher)

判断某个znode节点是否存在

参数: 路径、Watcher(监视器);当这个znode节点被改变时,将会触发当前Watcher

Stat exists(String path, boolean watch)

判断某个znode节点是否存在

参数: 路径、并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher

Stat setData(final String path, byte data[], int version)

设置某个znode上的数据

参数: 路径、数据、版本号;如果为-1,跳过版本检查

byte[] getData(final String path, Watcher watcher, Stat stat)

获取某个znode上的数据

参数: 路径、监视器、数据版本等信息

List getChildren(final String path, Watcher watcher)

获取某个节点下的所有子节点

参数: 路径、监视器;该方法有多个重载


znode创建类型(CreateMode):

PERSISTENT               持久化节点
   
PERSISTENT_SEQUENTIAL     顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1
   
EPHEMERAL    临时节点, 客户端session超时这类节点就会被自动删除
  

EPHEMERAL_SEQUENTIAL   临时自动编号节点


/*
 * ZookeeperTest.java
 */
package com.x.zookeeper;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * @author http://blog.youkuaiyun.com/java2000_wl
 * @version <b>1.0</b>
 */
public class ZookeeperTest {
	
	private static final int SESSION_TIMEOUT = 30000;
	
	public static final Logger LOGGER = LoggerFactory.getLogger(ZookeeperTest.class);
	
	private Watcher watcher =  new Watcher() {

		public void process(WatchedEvent event) {
			LOGGER.info("process : " + event.getType());
		}
	};
	
	private ZooKeeper zooKeeper;
	
	/**
	 *  连接zookeeper
	 * <br>------------------------------<br>
	 * @throws IOException
	 */
	@Before
	public void connect() throws IOException {
		zooKeeper  = new ZooKeeper("localhost:2181,localhost:2182,localhost:2183", SESSION_TIMEOUT, watcher);
	}
	
	/**
	 *  关闭连接
	 * <br>------------------------------<br>
	 */
	@After
	public void close() {
		try {
			zooKeeper.close();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建一个znode 
	 *  1.CreateMode 取值  
	 *  PERSISTENT:持久化,这个目录节点存储的数据不会丢失
	 *  PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;
	 *  EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session过期超时,这种节点会被自动删除
	 *  EPHEMERAL_SEQUENTIAL:临时自动编号节点
	 * <br>------------------------------<br>
	 */
	@Test
	public void testCreate() {
		String result = null;
		 try {
			 result = zooKeeper.create("/zk001", "zk001data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 LOGGER.info("create result : {}", result);
	 }
	
	/**
	 * 删除节点  忽略版本
	 * <br>------------------------------<br>
	 */
	@Test
	public void testDelete() {
		 try {
			zooKeeper.delete("/zk001", -1);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
	}
	
	/**
	 *   获取数据
	 * <br>------------------------------<br>
	 */
	@Test
	public void testGetData() {
		String result = null;
		 try {
			 byte[] bytes = zooKeeper.getData("/zk001", null, null);
			 result = new String(bytes);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 LOGGER.info("getdata result : {}", result);
	}
	
	/**
	 *   获取数据  设置watch
	 * <br>------------------------------<br>
	 */
	@Test
	public void testGetDataWatch() {
		String result = null;
		 try {
			 byte[] bytes = zooKeeper.getData("/zk001", new Watcher() {
				public void process(WatchedEvent event) {
					LOGGER.info("testGetDataWatch  watch : {}", event.getType());
				}
			 }, null);
			 result = new String(bytes);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 LOGGER.info("getdata result : {}", result);
		 
		 // 触发wacth  NodeDataChanged
		 try {
			 zooKeeper.setData("/zk001", "testSetData".getBytes(), -1);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
	}
	
	/**
	 *    判断节点是否存在
	 *    设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper实例时指定的 watcher
	 * <br>------------------------------<br>
	 */
	@Test
	public void testExists() {
		Stat stat = null;
		 try {
			 stat = zooKeeper.exists("/zk001", false);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 Assert.assertNotNull(stat);
		 LOGGER.info("exists result : {}", stat.getCzxid());
	}
	
	/**
	 *     设置对应znode下的数据  ,  -1表示匹配所有版本
	 * <br>------------------------------<br>
	 */
	@Test
	public void testSetData() {
		Stat stat = null;
		 try {
			 stat = zooKeeper.setData("/zk001", "testSetData".getBytes(), -1);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 Assert.assertNotNull(stat);
		 LOGGER.info("exists result : {}", stat.getVersion());	
	}
	
	/**
	 *    判断节点是否存在, 
	 *    设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper实例时指定的 watcher
	 * <br>------------------------------<br>
	 */
	@Test
	public void testExistsWatch1() {
		Stat stat = null;
		 try {
			 stat = zooKeeper.exists("/zk001", true);
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 Assert.assertNotNull(stat);
		 
		 try {
			zooKeeper.delete("/zk001", -1);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 *    判断节点是否存在, 
	 *    设置监控这个目录节点的 Watcher
	 * <br>------------------------------<br>
	 */
	@Test
	public void testExistsWatch2() {
		Stat stat = null;
		 try {
			 stat = zooKeeper.exists("/zk002", new Watcher() {
				@Override
				public void process(WatchedEvent event) {
					LOGGER.info("testExistsWatch2  watch : {}", event.getType());
				}
			 });
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
		 Assert.assertNotNull(stat);
		 
		 // 触发watch 中的process方法   NodeDataChanged
		 try {
			zooKeeper.setData("/zk002", "testExistsWatch2".getBytes(), -1);
		} catch (Exception e) {
			e.printStackTrace();
		}
		 
		 // 不会触发watch 只会触发一次
		 try {
			zooKeeper.delete("/zk002", -1);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 *  获取指定节点下的子节点
	 * <br>------------------------------<br>
	 */
	@Test
	public void testGetChild() {
		 try {
			 zooKeeper.create("/zk/001", "001".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
			 zooKeeper.create("/zk/002", "002".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
			 
			 List<String> list = zooKeeper.getChildren("/zk", true);
			for (String node : list) {
				LOGGER.info("node {}", node);
			}
		} catch (Exception e) {
			 LOGGER.error(e.getMessage());
			 Assert.fail();
		}
	}
}


大数据ZooKeeper(五):ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端框架 Curator ,解决了很多Zookeeper客户端非常底层的细节开发工作。封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器等。对zookeeper的底层api的一些封装。 阅读详情

相关推荐

zookeeper java api 操作(五) | curator-recipes

目录 一、概述 二、pom 依赖 三、Curator-recipes 1.Cache a.NodeCache b.PathCache c.TreeCache 2.Elections a.LeaderSelector b.LeaderLatch 3.Locks 4.Barriers 5.Counters 6....

qq_33513250的博客 5618

ZooKeeper之Java API的基本使用以及应用场景的实现

介绍ZooKeeper中Java API的基本使用,以及对Zookeeper常见应用场景的具体实现。

积跬步,至千里。 1058

ZooKeeper 实战:ZooKeeper Java API

ZooKeeper 大部分 API 都提供了同步和异步方法。同步方法一般会有返回值,并且会抛出相应的异常。异步方法没有返回值,也不会抛出异常

SmartSi 1552

zookeeper客户端命令详解-create

创建节点命令:create [-s] [-e] path data acl 这条命令包含znode四种模式的创建 持久(persistent) 命令:create path data znode被创建后,创建其的client连接断开或者zookeeper服务重启,该节点都会依然存在。 临时(ephemeral) 命令:create -e path data 当创建改znode的client...

curePony 4260

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

Zookeeper的基本操作:create,delete,get

1.背景介绍 1. 背景介绍 Zookeeper是一个开源的分布式应用程序,它提供了一种可靠的、高性能的协调服务。Zookeeper的主要功能是提供一种可靠的、高性能的分布式协同服务,以实现分布式应用程序的一致性和可用性。Zookeeper的核心功能包括数据持久化、监控、通知、配置管理、集群管理等。 Zookeeper的核心概念包括Znode、Watcher、Session、ACL等。Zno...

AI天才研究院 1342

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 674

zookeeper之java API使用

节点创建 package com.zookeeper; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; impor...

codingToMaster的博客 363

25年PINN创新点大盘点!

在科研论文的激烈角逐中,想轻松产出高含金量成果?物理信息神经网络(PINN)堪称“宝藏研究方向”,是冲击高分区论文的绝佳赛道!对于渴望发表优质论文的科研伙伴,这三大研究路径值得重点关注。首先是自适应PINN,在PINN训练过程中,物理方程与实测数据间的矛盾常常导致权重调节困难,而恰好直击这一痛点,是极具价值的研究方向。其次,同样前景广阔,传统多物理场同时训练效果欠佳,如今分阶段训练方法脱颖而出,成效显著且竞争较小。最后,探索及多任务学习等技术的融合,能实现优势叠加,碰撞出创新火花。

Malaai的博客 1970

基于STM32设计的数字电子秤

当前项目是采用采用STM32+称重模块+OLED实现了简单的电子秤项目,称重模块上采用24位的ADC芯片,精度较高。实现了称重,校准、去皮等功能。

1万+

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

前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等。这篇博文我们重点来看下Zookeeper的java客户端API使用方式。创建会话客户端可以通过创建一个Zookeeper(org.apache.zookeeper.ZooKeeper)实例来连接ZooKeeper服务器。给大家推荐一篇博文,构造方法和参数都介绍的非常的详细,看一下就好。我们看一

努力+坚持,而且还很年轻 7490

【Charge】仿真目录

Author: JiJi\textrm{Author: JiJi}Author: JiJi Created Time: 2026.01.20\textrm{Created Time: 2026.01.20}Created Time: 2026.01.20 Modified Time: 2026.01.20\textrm{Modified Time: 2026.01.20}Modified Time: 2026.01.20工作流程材料模型[Charge] 电荷分布与折射率变化理论 [Charge] FDTD

u011699626的博客 314

zookeeper(五)java API

org.apache.zookeeper.ZooKeeper类 主要方法列表方法名称描述String create(final String path, byte data[], List acl, CreateMode createMode)创建一个znode节点,参数: 路径、 znode内容,ACL(访问控制列表)、 znode创建类型void delete(final String

wackycrazy的专栏 315

131、高通骁龙影像平台总览:Spectra ISP 各代架构演进与特性对比

摘要:本文深入分析了高通骁龙Spectra ISP从250到780代的架构演进与技术痛点,揭示了各代关键改进与隐藏问题。重点剖析了双ISP带宽分配、AI ISP黑盒决策、温度控制等实战问题,并给出具体解决方案(如寄存器配置、QoS调整等)。文章强调工程师需平衡带宽、功耗与画质的三角关系,建议调试时先关闭AI模块建立基线,关注统计引擎配置,并建立温度监控机制。最后指出理解架构局限比追求完美设计更重要,需要针对不同场景找到合适的妥协方案。(148字)

sundong_81的博客 207

FPGA设计-Vivado的Off-Chip Termination设置问题

经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终端匹配怎么设置,Vivado的Off-Chip Termination设置问题,这里就详细说一下这个问题。

whm128的博客 2727

Zookeeper分布式一致性原理(五):Zookeeper-Java-API

1. 部署与运行 ZK文档 http://zookeeper.apache.org/doc/r3.4.13/zookeeperStarted.html ZK下载 https://www.apache.org/dyn/closer.cgi/zookeeper/ 2. 客户端脚本 运行 zkCli.sh 连接到Zookeeper集群 2.1 创建 使用create命令创建一个Znode节点,用法...

Master-TJ的个人博客 665

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Zookeeper--(五)使用zookeeper原生Java api实现增删改查

文章目录zookeeper原生增删改查的使用1. 会话连接与恢复2. 增加结点3. 删除节点4. 修改节点4. 查询节点5. 总结 zookeeper原生增删改查的使用 1. 会话连接与恢复 zookeeper连接相关API 创建连接关键方法public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher,bo...

我在阴山下 814

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ZooKeeper学习专栏(五):Java客户端开发(原生API)详解

本文深入讲解了Zookeeper Java原生API的核心使用,主要包括两大核心类:ZooKeeper类和Watcher接口。ZooKeeper类负责连接管理、会话维护和节点CRUD操作,提供丰富的API方法;Watcher接口则采用观察者模式处理连接状态变更和节点事件,具有一次性触发、轻量级通知等特点。文章通过详细代码示例演示了如何创建会话、注册监听器,并解析了各种事件类型和状态枚举。最后强调客户端版本需与服务端匹配,并建议排除冲突的日志依赖。为开发者掌握Zookeeper客户端开发提供了实用指导。

qq_43947876的博客 1354

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Zookeeper系列(五)Zookeeper客户端(JAVA)API之创建节点

本篇博客主要讲一下使用Zookeeper原生的客户API来创建一个数据节点。 创建数据节点方法 Zookeeper提供了两个创建数据节点的方法。 同步创建数据节点方法: public String create(final String path, byte data[], List acl, CreateMode createMode)

luckykapok918的专栏 577

java读取zookeeper_zookeeper学习之java api查找并删除节点<五>

听说好兄弟 康要当爸爸了,哎哟,巧了,今天写点zk的读取数据,getchildren,zk的api套路相信你也熟悉了吧,总是有区分同步和异步的接口,获取节点数据也是一样的,我的套路也是一样的,柿子先拿软的捏。 来看看 最简单的get孩子,这边两个参数写的很明白,路径,和是否注册watch,watcher会被触发当删除节点或者删除,创建了子节点,返回结果不保证是排序的,其中不存在就抛出KeeperE...

weixin_32043813的博客 158

ZooKeeper的Java API操作

        本篇博客小菌为大家带来期待已久的关于ZooKeeper的JavaAPI操作!!!         在向大家展示代码之前,先为大家介绍几个需要使用到的类! org.apache.zookeeper.Zookeeper Z...

大数据梦想家 5644

ZooKeeper Java API

org.apache.zookeeper.Zookeeper    Zookeeper是在Java中客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。 org.apache.zookeeper.Watcher    Watcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类...

weixin_45749011的博客 2万+

Zookeeper的Shell 客户端操作和zookeeper java api 代码

Zookeeper的Shell 客户端操作和zookeeper java api 代码Zookeeper的Shell 客户端操作ZooKeeper Java APIzookeeper选举机制 Zookeeper的Shell 客户端操作 运行 zkCli.sh –server ip:2181 命令 说明 参数 create [-s] [-e] path data acl 创建Znode -s 指定是顺序节 点 -e 指定是临时节 点 ls path [watch] 列出Path下所有子Znode get

Maynor的博客 3159
上一篇: Zookeeper(四)简单操作
下一篇: android权限列表
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值