专栏首页∑小熊猫的博客Zookeeper系列(7) —— Zookeeper 的 Java API

Zookeeper系列(7) —— Zookeeper 的 Java API

Zookeeper Java API

初始依赖

在使用 Java API 对 Zookeeper 进行操作是,首先需要引入相关的依赖。

在引入 zookeeper 的相关依赖时,我们需要注意添加的依赖的版本号要与在服务器上部署的 zookeeper 版本相对应。 我们可以在该网址上寻找相对应版本:https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper

<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.6.2</version>
</dependency>

连接 Zookeeper

Step2: 使用 Zookeeper 成功创建一个节点

public class ZKTest {
	public static String serverURL = "192.168.16.130:2181";
	public static int timeout = 30000;
	public ZooKeeper zk;
	private CountDownLatch countDownLatch = new CountDownLatch(1);
    
	@Before
	public void before() throws Exception {
		// 创建一个 zookeeper 的连接实例
		zk = new ZooKeeper(serverURL,timeout, new Watcher() {			
			public void process(WatchedEvent event) {
				System.out.println(event.getState());
				System.out.println(event.getType());
				System.out.println(event.getPath());
			}
		});
		countDownLatch.await();
		System.out.println(zk.getState());
	}
		
	@After
	public void after() throws Exception {
		// 断开连接
		System.out.println(zk.getState());
		zk.close();
	}
}

ZooKeeper 的构造函数 该构造函数包含3个入参 第一个是连接的字符串,改参数包含了连接的ip和端口号 第二个参数是连接时间 第三个参数是设置监听的实现,我们可以通过监听时间获得不同的信息从而采取不同的对策

使用 Java 操作 Zookeeper 的节点

/**
	 * public String create(final String path,byte[] data,List<ACL> acl,CreateMode createMode)
	 * 		throws KeeperException, InterruptedException
	 * @param path    		节点的路径
     * @param data    		节点的初始数据
     * @param acl     		节点的ACL
     * @param createMode	节点的创建模式,可以选择是否创建临时或序列化节
     */
	@Test
	public void test1() throws Exception {
		// 使用 zookeeper 实例创建一个节点
		String s = zk.create("/testzk/znode1", "testzk的第一个节点".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println(s);
	}
	
	
	/**
	 * public byte[] getData(String path, boolean watch, Stat stat) 
	 *		throws KeeperException, InterruptedException
	 * @param path 	节点的路劲
     * @param watch 是否对此节点设置监听
     * @param stat 	节点的状态
	 */
	@Test
	public void test2() throws Exception {
		// 获得节点的数据
		byte[] data = zk.getData("/testzk/znode1", false, null);
		String s = new String(data);
		System.out.println(s);
	}
	
	/**
	 * public List<String> getChildren(String path, boolean watch) 
	 * 		throws KeeperException, InterruptedException
	 * @param path	节点的路劲
     * @param watch	是否对此节点设置监听
	 */
	@Test
	public void test3() throws Exception {
		// 获取节点下的所有子节点
		List<String> child = zk.getChildren("/testzk", false);
		for(String s : child) {
			System.out.println(s);
		}
	}
	
	/**
	 * setData(final String path, byte[] data, int version) 
	 * 		throws KeeperException, InterruptedException
	 * @param path 		节点的路劲
     * @param data 		设置的节点数据
     * @param version	匹配的版本
	 */
	@Test
	public void test4() throws Exception {
		// 修改节点的值
		Stat stat = zk.setData("/testzk/znode1", "znode修改的值".getBytes(), -1);
		System.out.println(stat);
	}
	
	/**
	 * public void delete(final String path, int version) 
	 * 		throws InterruptedException, KeeperException
	 * @param path		要被删除的节点路劲
     * @param version	节点的版本
	 */
	@Test
	public void Test5() throws Exception {
		// 删除节点
		zk.delete("/testzk/znode", -1);
	}
	
	/**
	 * public Stat exists(String path, boolean watch) 
	 * 		throws KeeperException, InterruptedException
	 * @param path		节点的路劲
     * @param watch		是否设置监听
	 */
	@Test
	public void test6() throws Exception {
		// 获得节点的状态
		Stat stat = zk.exists("/testzk/znode", false);
		System.out.println(stat.getCtime());
	}

设置监听与监听的回调事件

设置监听

	@Test
	public void testx() throws Exception {
		zk.getData("/testzk/znode1", true, null);
		zk.setData("/testzk/znode1", "znode修改的值".getBytes(), -1);
	}

获取节点信息的函数 getData 函数包含三个入参 第一个是路径,是指向所获取的节点的信息 第二个是监听,是bool类型的值,表示是否这只监听 第三个是Stat,一般返回的是一个字节数组

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java 设计模式系列(10) —— 装饰器模式

    装饰器模式的定义: 动态的给一个对象添加额外的职责,就功能来说,装饰模式相比子类更为灵活

    求和小熊猫
  • Zookeeper系列(5) —— Zookeeper 常用的客户端操作命令

    创建节点的命令格式 create [-s] [-e] /path data acl

    求和小熊猫
  • Java 设计模式系列(4) —— 工厂模式

    工厂模式用于实现逻辑的封装,并通过公共的忌口提供对象的实例化服务,在添加新类时只需要做少量的修改。

    求和小熊猫
  • 探索c#之跳跃表(SkipList)

    蘑菇先生
  • 组合模式浅析

    组合模式是指将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

    孟君
  • 快速目标检测--YOLO-LITE: A Real-Time Object Detection Algorithm Optimized for Non-GPU Computers

    YOLO-LITE: A Real-Time Object Detection Algorithm Optimized for Non-GPU Computer...

    用户1148525
  • 分布式作业 Elastic-Job-Lite 源码分析 —— 作业数据存储

    JobNodePath,作业节点路径类。作业节点是在普通的节点前加上作业名称的前缀。

    芋道源码
  • 硅谷巨头的语音交互入口争夺战中,谷歌面临五大挑战

    李杉 编译自 Recode 量子位 报道 | 公众号 QbitAI 如果谷歌想继续成为主导全球的信息来源,就需要确保人们能够在各种情况下继续使用谷歌产品。为了达...

    量子位
  • 分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业数据存储

    JobNodePath,作业节点路径类。作业节点是在普通的节点前加上作业名称的前缀。

    芋道源码
  • 【微信开发】 使用单例设计模式 提供AccessToken 和Jsapi_ticket缓存支持

    上一篇 是使用ecache 做的缓存, 有些简单的微信项目并不需要这么复杂,所以就想到单例设计模式  首先,我们先定义一个单例对象 import java.ut...

    冷冷

扫码关注云+社区

领取腾讯云代金券