iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Zookeeper的Java API操作(一)
  • 248
分享到

Zookeeper的Java API操作(一)

Zookeeper的JavaAPI操作(一) 2021-02-15 19:02:35 248人浏览 绘本
摘要

环境搭建 创建一个普通的Maven项目 导入log4j.properties日志文件到项目的根目录或者resource文件下。 在pom.xml中添加Zookeeper的相关依赖: org.apache.ZooKeeper

Zookeeper的Java API操作(一)

环境搭建

  1. 创建一个普通的Maven项目
  2. 导入log4j.properties日志文件到项目的根目录或者resource文件下。
  3. 在pom.xml中添加Zookeeper的相关依赖
    <dependency>
        <groupId>org.apache.ZooKeepergroupId>
        <artifactId>zookeeperartifactId>
        <version>3.5.7version>
    dependency>
    
    <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>4.13.1version>
        <scope>runtimescope>
    dependency>
  4. 除了Maven的项目依赖,还可以通过导入Zookeeper相关jar包部署Zookeeper环境。Zookeeper所需要的的jar包如下:
  • ZOOKEEPER_HOME目录:

    zookeeper-3.5.7.jar

  • ZOOKEEPER_HOME/lib目录:

    jline-0.9.94.jar、

    log4j-1.2.16.jar、

    Netty-3.10.5.Final.jar、

    slf4j-api-1.6.1.jar、

    slf4j-log4j12-1.6.1.jar

    将上述jar包拷贝到工程的lib目录。并build一下,导入工程。

API操作Zookeeper

环境搭建完成之后,就可以使用Java代码来操作Zookeeper啦!第一步当然是连接Zookeeper了。

连接Zookeeper

前言

Java API连接Zookeeper只需要一步:即创建Zookeeper对象

首先进入到Zookeeper类中可以看到:

public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException {
    this(connectString, sessionTimeout, watcher, false);
}

创建Zookeeper对象需要传入三个参数:

  • connectString:连接的地址,包括主机名和端口号。
  • sessionTimeout:表示Zookeeper等待客户端通信的最长时间,客户端如果超过这个时间没有和服务端进行通信,那么就认为该客户端已终止,一般设置值5~10s。单位是毫秒。
  • watcher:监听器。用于接收会话事件的接口,需要自己定义,实现process()方法。

有了上述基础之后,就可以连接Zookeeper了!

连接Zookeeper

Zookeeper zkClient = "";
String connectStr = "node1:2181,node2:2181,node3:2181";
zkClient = new ZooKeeper(connectStr, 2000, new Watcher() {
    @Override
    public void process(WatchedEvent watchedEvent) { }
});

连接成功:

【注意】

  1. 字符串中,两段千万不能加空格,否则就会报错
  2. 如果在windows上也想使用node1,node2,node3主机名来代替输入主机ip,那么我们必须在Windows本地配置主机ip映射。Windows配置主机映射目录C:WindowsSystem32driversetchosts。只需要在该文件下添加 "ip 主机名"字段即可。

    此时在Windows命令行就可以实现直接ping主机名了。

创建节点

前言

创建节点所需要的方法是create()。此处需要传入四个参数:

public String create(String path, byte[] data, List acl, CreateMode createMode) throws KeeperException, InterruptedException {}

其中四个参数代表的含义是:

  • String path:节点路径
  • byte[] data,:节点数据---字节数组
  • List acl:节点权限
  • CreateMode createMode:节点类型

其中,设置文件权限的基本参数解读如下:

(1) OPEN_ACL_UNSAFE :完全开放。 事实上这里是采用了world验证模式,由于每个zk连接都有world验证模式,所以znode在设置了 OPEN_ACL_UNSAFE 时,是对所有的连接开放。

(2) CREATOR_ALL_ACL :给创建该znode连接所有权限。 事实上这里是采用了auth验证模式,使用sessionID做验证。所以设置了 CREATOR_ALL_ACL 时,创建该znode的连接可以对该znode做任何修改。

(3) READ_ACL_UNSAFE :所有的客户端都可读。 事实上这里是采用了world验证模式,由于每个zk连接都有world验证模式,所以znode在设置了READ_ACL_UNSAFE时,所有的连接都可以读该znode。

设置文件类型的基本参数解读如下:

观察CreateMode源码可以发现CreateMode是一个枚举类。 创建Node的类型有:持久节点、持久有序号的节点、短暂节点、短暂有序号的节点

创建节点

  1. 创建持久不带序号节点
    @Test
    public void createNode() throws InterruptedException, KeeperException {
        String node = zkClient.create("/javaClient", "javaTest".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISENT);
        System.out.println(node);
    }

    持久化节点创建成功:

  2. 创建持久带序号的节点:
    @Test
    public void createNode() throws InterruptedException, KeeperException {
        String node = zkClient.create("/javaClient1", "javaTest".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISENT_SEQUENTIAL);
        System.out.println(node);
    } 

    创建成功:

  3. 创建短暂不带序号节点:
    @Test
    public void createNode() throws InterruptedException, KeeperException {
        String node = zkClient.create("/javaClient2", "javaTest".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        System.out.println(node);
    } 

    创建成功:

    注意】创建成功后在主机查看却发现没有/javaClient2这个节点。因为在Java运行结束之后,客户端服务就关闭了,此时临时节点已经删除,再去查看的时候已经没有了。此时可以通过设置一个线程睡眠时间,就可以在睡眠时间内另一台客户端看到文件。

    @Test
    public void createNode() throws InterruptedException, KeeperException {
        String node = zkClient.create("/javaClient3", "javaTest".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
        System.out.println(node);
        Thread.sleep(10000);
    } 

  4. 创建短暂带序号节点

    创建短暂带序号节点就可以参照创建持久带序号节点完成了,只需要将CreateMode的值设为 "EPHEMERAL_SEQUENTIAL"即可

删除节点

前言

删除节点可以使用Zookeeper中的delete()方法

public void delete(String path, int version) throws InterruptedException, KeeperException {}

两个参数:第一个是删除的节点路径,第二个是要删除节点的版本号版本号可以通过ls -s path查看节点详情信息,cversion即是对应的版本值

如果写的版本不正确,将会报如下错误:

注意】delete方法是用来删除单个节点的,不能进行迭代删除。

由于此处的/test节点下还有一个子节点

如果使用delete去删除,还会报如下错误:

删除节点

public void deleteNode() throws InterruptedException, KeeperException {
    zkClient.delete("/test20000000006", 0);
}

删除成功:

 

--结束END--

本文标题: Zookeeper的Java API操作(一)

本文链接: https://www.lsjlt.com/news/8684.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Zookeeper的Java API操作(一)
    环境搭建 创建一个普通的Maven项目 导入log4j.properties日志文件到项目的根目录或者resource文件下。 在pom.xml中添加Zookeeper的相关依赖: org.apache.zookeeper...
    99+
    2021-02-15
    Zookeeper的Java API操作(一)
  • zookeeper-3. java操作z
    对于Zookeeper的建立连接、增删改查、以及监视节点的变化操作。一、简单实例操作zookeeper原生API1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器。参数说明:connectStri...
    99+
    2023-01-31
    操作 zookeeper java
  • java操作zookeeper实例代码
    本篇内容主要讲解“java操作zookeeper实例代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java操作zookeeper实例代码”吧!package...
    99+
    2022-10-18
  • 如何使用Java操作Zookeeper
    目录简介使用zkclient操作Zookeeper节点监听简介 Java操作Zookeeper有很多种方式,如zookeeper、zkclient、curator等等,下面介绍下使...
    99+
    2022-11-12
  • 怎么使用Java操作Zookeeper
    这篇文章给大家分享的是有关怎么使用Java操作Zookeeper的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象...
    99+
    2023-06-14
  • ZooKeeper Java API编程的示例分析
    这篇文章主要为大家展示了“ZooKeeper Java API编程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ZooKeeper Java API编程的示例分析”这篇文章吧。开发应用...
    99+
    2023-05-30
    zookeeper java
  • java操作hbase api
    需要引入的jar包(这里的jar包括hbase,hive的UDF,hive的jdbc连接)java源码package com.hbase.jdbc; import java.util....
    99+
    2022-10-18
  • Java 通过API操作GraphQL
    目录引入依赖Java中使用GraphQL的API 无参数简单查询带参数简单查询GraphQL可以通过Java的API来实现数据的查询,通过特定的SDL查询语句,获取特定的查询数据。相...
    99+
    2022-11-12
  • Java API如何操作Hive
    这篇文章给大家分享的是有关Java API如何操作Hive的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环境:   IDEA2017.3+Maven-3.3.9+Hive1.1.0 pom.x...
    99+
    2023-06-02
  • Java 8:Stream API 流式操作
    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java 8:Stream API Java 8 中的 Stream API 是一组...
    99+
    2023-08-16
    java python
  • MongoDB Java API操作很全的整理
    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,一般生产上建议以共享分片的形式来部署。 但是MongoDB官方也提供了其它语言的客户端操作API。如下图所示: 提供了C、C++、C#、.net、GO、java、Nod...
    99+
    2015-08-19
    MongoDB Java API操作很全的整理
  • Java API操作Hdfs的示例详解
    目录1.遍历当前目录下所有文件与文件夹2.遍历所有文件3.创建文件夹4.删除文件夹5.上传文件6.下载文件1.遍历当前目录下所有文件与文件夹 可以使用listStatus方法实现上述...
    99+
    2022-11-13
  • (十一)JAVA操作InfluxDB
    以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 11 章 JAVA操作InfluxDB InfluxDB客户端可以参考:https...
    99+
    2023-09-27
    java influxdb 时序数据库
  • Java elasticSearch-api的具体操作步骤讲解
    目录1.环境准备2.针对索引操作3.针对doc操作(增删改)4.针对doc操作(查)5.java-api6.spring-data-elasticsearch使用步骤 1.环境准备...
    99+
    2022-11-12
  • java的Stream API终端操作示例分析
    这篇文章主要介绍“java的Stream API终端操作示例分析”,在日常操作中,相信很多人在java的Stream API终端操作示例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”j...
    99+
    2023-06-29
  • Java API操作HDFS方法是什么
    这篇“Java API操作HDFS方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java AP...
    99+
    2023-07-05
  • Java日期相关API的基本操作总结
    目录前言JDK8之前Date对象的使用格式化日期SimpleDateFormat类的使用JDK8之后LocalDate 、LocalTime 、LocalDateTime的使用格式化...
    99+
    2022-11-21
    Java日期API操作 Java日期API
  • Java如何操作MongoDB常用API文档
    目录Java操作MongoDB常用API文档1.查询指定字段2.按条件查询3.对查询结果排序4.获取满足条件的前n条数据Java使用MongoDB数据库相关API小记MongDB数据...
    99+
    2022-11-13
  • Java微信跳一跳操作指南
    Java微信跳一跳操作指南,指哪挑哪。本文的思路是通过adb来控制手机进行操作,通过java写一个jframe覆盖在手机屏幕上,用鼠标获取跳的起点和终点,经过试验获取跳的jframe距离和按压时长的关系(线性关系),然后通过adb来根据计算...
    99+
    2023-05-30
  • Java Stream API 使代码更出色的操作完全攻略
    目录前言示例示例 1:使用 filter() 方法过滤奇数示例 2:使用 map() 方法将每个字符串转换为大写示例 3:使用 flatMap() 方法将嵌套的列表展平为一个列表示例...
    99+
    2023-05-15
    Java Stream API Java Stream API 操作
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作