Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ZooKeeper快速入门系列(6) | Zookeeper的API操作

ZooKeeper快速入门系列(6) | Zookeeper的API操作

作者头像
不温卜火
发布于 2020-10-28 08:35:02
发布于 2020-10-28 08:35:02
45700
代码可运行
举报
文章被收录于专栏:不温卜火不温卜火
运行总次数:0
代码可运行

本篇博客博主为大家带来期待已久的关于ZooKeeper的JavaAPI操作。

一. IDEA环境搭建

1.1 创建一个Maven工程

1.2 添加Porn文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.8.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.10</version>
		</dependency>
</dependencies>

1.3 拷贝log4j.properties文件到项目根目录

需要在项目的src/main/resources目录下,新建一个文件,命名为“log4j.properties”,在文件中填入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log4j.rootLogger=INFO, stdout  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
log4j.appender.logfile=org.apache.log4j.FileAppender  
log4j.appender.logfile.File=target/spring.log  
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n  

二. API操作

前提(测试是否正常连接)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.buwenbuhuo.zookeeper;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.junit.Before;
import org.junit.Test;

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

/**
 * @author 卜温不火
 * @create 2020-04-27 22:01
 * com.buwenbuhuo.zookeeper - the name of the target package where the new class or interface will be created.
 * ZooKeeper0427 - the name of the current project.
 */
public class ZkClient {
    private ZooKeeper zkCli;
    private static final String CONNECT_STRING = "hadoop002:2181,hadoop003:2181,hadoop004:2181";
    private static final int SESSION_TIMEOUT = 2000;

//    @Before
//    public void before() throws IOException {
//        zkCli = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new Watcher() {
//            public void process(WatchedEvent watchedEvent) {
//
//            }
//        });
//    }
    // 此部分为上部分的简写
    @Before
    public void before() throws IOException {
        zkCli = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, e -> {
            System.out.println("默认回调函数");
        });
    }

    @Test
    public void ls() throws KeeperException,InterruptedException{
        List<String> children = zkCli.getChildren("/",true);
        System.out.println("===========================================");
        for (String child: children){
            System.out.println(child);
        }
        System.out.println("===========================================");

        Thread.sleep(Long.MAX_VALUE);
    }
}

2.1 创建ZooKeeper客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static String connectString =
 "hadoop002:2181,hadoop003:2181,hadoop004:2181";
	private static int sessionTimeout = 2000;
	private ZooKeeper zkClient = null;

	@Before
	public void init() throws Exception {

	zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {

			@Override
			public void process(WatchedEvent event) {

				// 收到事件通知后的回调函数(用户的业务逻辑)
				System.out.println(event.getType() + "--" + event.getPath());

				// 再次启动监听
				try {
					zkClient.getChildren("/", true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

2.2 创建子节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建子节点
@Test
public void create() throws Exception {

		// 参数1:要创建的节点的路径; 参数2:节点数据 ; 参数3:节点权限 ;参数4:节点的类型
		String nodeCreated = zkClient.create("/sanguo", "jinlian".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}

2.4 获取子节点并监听节点变化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取子节点
@Test
public void getChildren() throws Exception {

		List<String> children = zkClient.getChildren("/", true);

		for (String child : children) {
			System.out.println(child);
		}

		// 延时阻塞
		Thread.sleep(Long.MAX_VALUE);
}

2.5 判断Znode是否存在

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 判断znode是否存在
@Test
public void exist() throws Exception {

	Stat stat = zkClient.exists("/IDEA", false);

	System.out.println(stat == null ? "not exist" : "exist");
}

2.6 基础操作案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) throws Exception {
        // 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
        ZooKeeper zk = new ZooKeeper("hadoop002:2181,hadoop003,hadoop004", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("事件类型为:" + event.getType());
                System.out.println("事件发生的路径:" + event.getPath());
                System.out.println("通知状态为:" +event.getState());
            }
        });
	zk.create("/myGirls", "性感的".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE,
		 CreateMode.PERSISTENT);
      zk.close();

2.7 更多实例操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) throws Exception {
        // 初始化 ZooKeeper实例(zk地址、会话超时时间,与系统默认一致、watcher)
        ZooKeeper zk = new ZooKeeper("hadoop002:2181,hadoop003,hadoop004", 30000, new Watcher() {
            @Override
            public void process(WatchedEvent event) {
                System.out.println("事件类型为:" + event.getType());
                System.out.println("事件发生的路径:" + event.getPath());
                System.out.println("通知状态为:" +event.getState());
            }
        });
    // 创建一个目录节点
 zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
   CreateMode.PERSISTENT); 
 // 创建一个子目录节点
 zk.create("/testRootPath/testChildPathOne", "testChildDataOne".getBytes(),
   Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
 System.out.println(new String(zk.getData("/testRootPath",false,null))); 
 // 取出子目录节点列表
 System.out.println(zk.getChildren("/testRootPath",true)); 
 // 修改子目录节点数据
 zk.setData("/testRootPath/testChildPathOne","modifyChildDataOne".getBytes(),-1); 
 System.out.println("目录节点状态:["+zk.exists("/testRootPath",true)+"]"); 
 // 创建另外一个子目录节点
 zk.create("/testRootPath/testChildPathTwo", "testChildDataTwo".getBytes(), 
   Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); 
 System.out.println(new String(zk.getData("/testRootPath/testChildPathTwo",true,null))); 
 // 删除子目录节点
 zk.delete("/testRootPath/testChildPathTwo",-1); 
 zk.delete("/testRootPath/testChildPathOne",-1); 
 // 删除父目录节点
 zk.delete("/testRootPath",-1);
 zk.close();
}

API操作比较偏向基础,博主在此把注释写了上去。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Zookeeper04之javaAPI的使用
  本文主要介绍下zookeeper的javaAPI的使用,zookeeper的安装操作及命令不清楚的可参考前面文章
用户4919348
2019/04/02
5820
Zookeeper04之javaAPI的使用
zookeeper代码实现常用命令 - 雨中散步撒哈拉
一、创建项目 1. 添加依赖包,pom文件如下 2. 配置日志文件二、代码实现zk命令 0. 创建连接 2. 创建节点 3. 监听节点变化 4. 判断节点是否存在 5. 测试完整代码
雨中散步撒哈拉
2022/09/21
1710
zookeeper编程01-循环监听
客户端发起对节点的事务操作(以NodeChildrenChanged事件为例) 服务端监听到对应的事件后进行相应的操作
CoderJed
2018/09/13
1.8K1
ZooKeeper的Java API操作
process方法是Watcher接口中的一个回调方法,当ZooKeeper向客户端发送一个Watcher事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。
大数据梦想家
2021/01/21
4720
Zookeeper的Shell 客户端操作和zookeeper java api 代码
删除节点, 如果要删除的节点有子 Znode则无法删除 version 数据版本
Maynor
2021/04/09
5050
ZooKeeper学习第三期---Zookeeper命令操作
Zookeeper支持某些特定的四字命令字母与其的交互。他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令。Zookeeper常用的四字命令见下图所示。
用户5640963
2019/07/26
1K0
ZooKeeper学习第三期---Zookeeper命令操作
分布式服务框架 Zookeeper
转自http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ 安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。 单机模式 单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个
老白
2018/03/19
1.1K0
分布式服务框架 Zookeeper
《快学BigData》--Zookeeper 总结(D)(24)
先在编辑器中导入zookeeper-3.4.5\lib的JAR包,还有一个是zookeeper根目录下的zookeeper-3.4.5.jar
小徐
2023/03/06
1740
《快学BigData》--Zookeeper 总结(D)(24)
5 java操作zookeeper
用户7630333
2023/12/07
1330
5  java操作zookeeper
ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据
本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它涉及到了paxos算法、Zab协议、通信协议等相关知 识,理解起来比较抽象所以还需要借助一些应用场景,来帮我们理解。由于内容比较多,一口气吃不成胖子,得慢慢来一步一个脚印,因此我对后期 ZooKeeper的学习规划如下:
用户5640963
2019/07/26
3790
ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据
zookeeper使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
5660
zookeeper编程02-服务器上下线动态感知
NameNode判断DataNode是否下线的时间太长了,利用zookeeper实现服务器上下线动态感知
CoderJed
2018/09/13
9170
zookeeper编程02-服务器上下线动态感知
Zookeeper系列(7) —— Zookeeper 的 Java API
在使用 Java API 对 Zookeeper 进行操作是,首先需要引入相关的依赖。
求和小熊猫
2020/11/25
5620
ZooKeeper 相关概念以及使用小结
Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 API 操作。
andyxh
2019/09/05
4740
ZooKeeper 相关概念以及使用小结
ZooKeeper学习
2.zookeeper本身就是一个分布式程序,(只要有半数节点存活,就能正常服务。适合奇数节点)
曼路
2018/10/18
5960
zookeeper应用
通过上一篇的学习,对zookeeper大致有了一些了解,但是想在实际开发与合适的业务场景中使用,还是需要依赖更多深入的学习,同时在项目中不断的实实践,发现问题并解决,才能对技术有更清晰与独特的见解。
sucl
2019/08/07
7140
zookeeper的简单搭建,java使用zk的例子和一些坑
由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。
ydymz
2018/10/09
1.2K0
zookeeper的简单搭建,java使用zk的例子和一些坑
少年:ZooKeeper学一下
很多中间件,比如Kafka、Hadoop、HBase,都用到了 Zookeeper,于是很多人就会去了解这个 Zookeeper 到底是什么,为什么它在分布式系统里有着如此无可替代的地位。
sowhat1412
2020/11/05
5580
少年:ZooKeeper学一下
zookeeper实现动态感知服务器上下线
  在实际的生产环境中我们一般都是集群环境部署的,同一个程序我们会部署在相同的几台服务器中,这时我们可以通过负载均衡服务器去调度,但是我们并不能很快速的获知哪台服务器挂掉了,这时我们就可以使用zookeeper来解决这个问题。
用户4919348
2019/04/02
2.1K0
zookeeper实现动态感知服务器上下线
大数据技术之_06_Zookeeper学习_Zookeeper入门+Zookeeper安装+Zookeeper内部原理+Zookeeper实战(开发重点)+企业面试真题
  Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。
黑泽君
2019/03/06
9070
相关推荐
Zookeeper04之javaAPI的使用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验