热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

如何使用Java操作Zookeeper

这篇文章主要介绍了如何使用Java操作Zookeeper,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下

简介

Java操作Zookeeper有很多种方式,如zookeeper、zkclient、curator等等,下面介绍下使用zkclient的方式操作Zookeeper。

Maven依赖:


	com.101tec
	zkclient
	0.11

使用zkclient操作Zookeeper

创建节点:

@Test
public void testCreateNode() {
	//建立连接
	//zkServers: Zookeeper服务器IP地址和端口号,如果是集群情况下用逗号分割多个Zookeeper服务器地址
	//sessionTimeout: 会话超时时间
	//connectionTimeout: 连接超时时间
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//创建数据
	Student student = new Student();
	student.setName("张三");
	student.setAge(18);
	student.setPhone("1585454xxxx");

	//创建持久节点
	zkClient.createPersistent("/p_node", student);
	//创建持久顺序节点
	zkClient.createPersistentSequential("/ps_node", student);
	//创建临时节点
	zkClient.createEphemeral("/e_node", student);
	//创建临时顺序节点
	zkClient.createEphemeralSequential("/ps_node", student);

	//关闭客户端
	//关闭客户端的同时,前面创建的临时节点也会被删除
	zkClient.close();
}

读取节点数据:

@Test
public void testReadNodeData() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	Stat stat = new Stat();
	Student student = zkClient.readData("/p_node", stat);
	System.out.println("节点状态信息:" + JSON.toJSONString(student));
	System.out.println("节点数据:" + JSON.toJSONString(stat));

	zkClient.close();
}
//输出结果:
//节点状态信息:{"age":18,"name":"张三","phone":"1585454xxxx"}
//节点数据:{"aversion":0,"ctime":1619165355431,"cversion":0,"czxid":165,"dataLength":260,"ephemeralOwner":0,"mtime":1619165355431,"mzxid":165,"numChildren":0,"pzxid":165,"version":0}

删除节点:

@Test
public void testDeleteNode() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//删除节点,不能删除带有子节点的节点
	zkClient.delete("/p_node");
	//删除节点,递归删除所有子孙节点
	zkClient.deleteRecursive("/p_node2");

	zkClient.close();
}

更新节点数据:

@Test
public void testWriteNodeData() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//更新节点数据
	zkClient.writeData("/p_node", "myData1");
	//使用CAS更新节点数据
	//zkClient.writeData("/p_node", "myData2", 1);

	zkClient.close();
}

获取子节点列表:

@Test
public void testGetChildNodes() {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);

	//获取子节点列表
	List childList = zkClient.getChildren("/p_node");
	childList.stream().forEach(System.out::println);

	zkClient.close();
}

节点监听

Java节点监听都是永久的,触发一次后不会被删除。

监听节点的子节点变化:

@Test
public void testSubscribeChildChanges() throws IOException {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);
	zkClient.subscribeChildChanges("/p_node", new IZkChildListener(){

		//子节点改变时调用
		@Override
		public void handleChildChange(String parentPath, List currentChilds) throws Exception {
			System.out.println(parentPath + "子节点发生改变");
			System.out.println("当前子节点列表:" + currentChilds);
		}

	});

	//阻塞客户端,便于测试
	System.in.read();
}

监听节点数据变化:

@Test
public void testSubscribeDataChanges() throws IOException {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);
	zkClient.subscribeDataChanges("/p_node", new IZkDataListener(){

		//节点数据改变时调用
		@Override
		public void handleDataChange(String dataPath, Object data) throws Exception {
			System.out.println(dataPath + "节点数据发生变化");
			System.out.println("修改后的数据为:" + data.toString());
		}

		//节点被删除时调用
		@Override
		public void handleDataDeleted(String dataPath) throws Exception {
			System.out.println(dataPath + "节点已被删除");
		}
	});

	//阻塞客户端,便于测试
	System.in.read();
}

监听Zookeeper连接状态变化:

@Test
public void testSubscribeStateChanges() throws IOException {
	ZkClient zkClient = new ZkClient("127.0.0.1:2181", 60000, 5000);
	zkClient.subscribeStateChanges(new IZkStateListener(){

		//当zookeeper连接状态改变时调用
		@Override
		public void handleStateChanged(Watcher.Event.KeeperState state) throws Exception {
			System.out.println("当前状态" + state);
		}

		//在zookeeper会话过期并且创建了一个新的会话之后调用
		@Override
		public void handleNewSession() throws Exception {
			System.out.println("会话过期,已创建新的会话");
		}

		//当会话不能重新建立时调用
		@Override
		public void handleSessionEstablishmentError(Throwable error) throws Exception {
			error.printStackTrace();
		}
	});

	//阻塞客户端,便于测试
	System.in.read();
}

以上就是如何使用Java操作Zookeeper的详细内容,更多关于Java操作Zookeeper的资料请关注其它相关文章!


推荐阅读
  • 本文详细介绍了如何手动编写兼容IE的Ajax函数,以及探讨了跨域请求的实现方法和原理,包括JSONP和服务器端设置HTTP头部等技术。 ... [详细]
  • 消息传递这一应用广泛存在于各个网站中,这个功能也是一个网站必不可少的。本文主要介绍了php中Redis的应用--消息传递。下面跟着小编一起来看下吧阅读目录1、摘要2、实现方法3、一 ... [详细]
  • SonarQube配置与使用指南
    本文档详细介绍了SonarQube的配置方法及使用流程,包括环境准备、样本分析、数据库配置、项目属性文件解析以及插件安装等内容,适用于具有Linux基础操作能力的用户。 ... [详细]
  • 本文基于https://major.io/2014/05/13/coreos-vs-project-atomic-a-review/的内容,对CoreOS和Atomic两个操作系统进行了详细的对比,涵盖部署、管理和安全性等多个方面。 ... [详细]
  • 本文探讨了在Android平台下编写和读取.JSON文件的方法,解决读取文件时遇到的字符间异常空格问题。 ... [详细]
  • 解决 IIS 无法访问 .pnts 文件的问题
    本文详细介绍了在使用 IIS 服务器时遇到的 .pnts 文件无法访问的问题及其解决方案。通过正确配置 MIME 类型,可以轻松解决这一常见问题。 ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 一个产品数组拼图|集合 2 (O(1)空间) ... [详细]
  • ###########性能监控脚本###########################!binbash#监控cpu系统负载IPifconfigeth0|grepinetaddr ... [详细]
  • databasesync适配openGauss使用指导书
    一、database-sync简介database-sync作为一种开源辅助工具,用于数据库之间的表同步,更确切的说法是复制,可以从一个数据库复制表到另一个数据库该工具支持的功能如 ... [详细]
  • ThinkPHP 文件缓存组件详解与应用
    本文深入探讨了ThinkPHP框架中的文件缓存类实现,提供了详细的代码示例和使用说明,旨在帮助开发者更好地理解和利用这一功能来优化应用程序性能。 ... [详细]
  • APP数据包捕获挑战
    本文探讨了在使用Burp Suite捕获移动应用数据包时遇到的两大难题,尤其是SSL Pinning安全机制的影响,并提供了一种解决方案。 ... [详细]
  • 我正在从数据库中提取一系列事件,并尝试加载与这些事件相关的所有用户及其个人资料。虽然用户信息能够成功加载,但用户的个人资料信息却未能一同加载。 ... [详细]
author-avatar
手机用户2602914827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有