返回顶部
首页 > 资讯 > 后端开发 > Python >zookeeper-3. java操作z
  • 126
分享到

zookeeper-3. java操作z

操作zookeeperjava 2023-01-31 06:01:02 126人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

对于ZooKeeper的建立连接、增删改查、以及监视节点的变化操作。一、简单实例操作zookeeper原生api1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器。参数说明:connectStri


对于ZooKeeper的建立连接、增删改查、以及监视节点的变化操作。


一、简单实例操作zookeeper原生api


1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器

参数说明:

connectString:连接服务器列表,用“,”分割;

sessionTimeout:心跳检测时间周期(毫秒);

watcher:事件处理通知器;

canBeReadOnly:标识当前会话是否支持只读;

sessionId, sessionPasswd:提供链接zookeeper的sessionId和密码,通过这俩确定唯一一台客户端,目的是可以提供重复会话;

注意:zookeeper客户端和服务器端会话的建立是一个异步的过程。



static final String CONNECT_ADDR = "192.168.80.88:2181,192.168.80.87:2181,192.168.80.86:2181";


static final int SESSION_OUTTIME = 2000;//ms


static final CountDownLatch connectedSemaphore = new CountDownLatch(1);

//创建zookeeper连接
ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){
    @Override
    public void process(WatchedEvent event) {
      //连接状态
       KeeperState keeperState = event.getState();
       
      //事件类型
       EventType eventType = event.getType();
       
       //如果是建立连接
        if(KeeperState.SyncConnected == keeperState){
        
            if(EventType.None == eventType){
            
            //如果建立连接成功,则发送信号量,让后续阻塞程序向下执行
            connectedSemaphore.countDown();
            System.out.println("zk 建立连接");
            
            }
       }
    }
});
//进行阻塞
connectedSemaphore.await();



2. 创建节点(znode)方法:create  提供同步和异步两种方式

同步方式:

参数说明:

path:节点路径(名称),不允许递归创建节点;

data:节点内容,是字节数组,不支持序列化方式,如果需要序列化,可使用java相关的序列化框架如Hessian、Kryo框架;

acl: 节点权限,使用Ids.OPEN_ACL_UNSAFE开放权限即可;

createMode:节点类型,提供了以下四种

PERSISTENT(持久节点)

PERSISTENT_SEQUENTIAL(持久顺序节点)

EPHEMERAL(临时节点)

EPHEMERAL_SEQUENTIAL(临时顺序节点)

//创建父节点,不允许递归创建节点,不支持序列化方式

zk.
create
("/testRoot", "testRoot".getBytes(), 
Ids.OPEN_ACL_UNSAFE
, 
CreateMode.PERSISTENT
);


异步方式:(再同步的基础上添加两个参数)

参数说明:

StrinGCallback:注册一个异步回调函数,要实现AsynCallBack.StringCallBack接口,重写proce***esult()方法,当节点创建完毕后执行此方法;

·rc:服务器响应码 0表示成功-4表示连接 -110表示制定节点存在 -112表示会话已过期

·path:接口调用时传入API的数据节点的路径参数

·ctx:为调用接口传入API的ctx,

·name:实际在服务器端创建节点的名称

Object:传递给回调函数的参数,一般为上下文信息;


//异步创建节点

zooKeeper.create("/apis/","create api1".getBytes(),

    Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL,
    
    new StringCallback(){
    
        public void proce***esult(int rc, String path,Object ctx, String name) {
        if(rc==0){
        
            System.out.println("创建节点完成");
            countDownLatch.countDown();
        }
    }
 },"12345");



3. 判断节点(znode)是否存在:exists

参数说明:

path:路径

watcher:注册的watcher对象,一旦之后节点内容有变更,则会向客户端发送通知,该参数可以为null。(用于三类事件监听:节点的创建、删除、更新)

watch:是否使用watcher,如果为true则默认使用上文中的watcher。false则不使用watcher。

cb:回调函数

ctx:用于传递的上下文信息对象

注意:exists方法的意义在于无论节点是否存在,都可以进行注册watcher,能够对节点的创建、删除、修改进行监听,但是其子节点变化,不会通知客户端。


//判断节点是否存在
zk.exists("/testRoot/children", false)



4. 获得节点(znode)数据:getData

参数说明:

path:路径

watcher:注册的watcher对象,一旦之后节点内容有变更,则会向客户端发送通知,该参数可以为null。(用于三类事件监听:节点的创建、删除、更新)

watch:是否使用watcher,如果为true则默认使用上文中的watcher。false则不使用watcher。


//获取节点信息
byte[] data = zk.getData("/testRoot", false, null);

System.out.println(new String(data));



5. 修改节点(znode)数据:setData

参数说明:

path:路径

data:节点内容,是字节数组,不支持序列化方式,如果需要序列化,可使用java相关的序列化框架如Hessian、Kryo框架;

version:版本号,-1则跳过版本检查;


//修改节点的值
zk.setData("/testRoot", "modify data root".getBytes(), -1);


6. 遍历子节点:getChildren

参数说明:

path:路径

watcher:注册的watcher对象,一旦在本次节点获取后,子节点列表发生变更的话,那么会向客户端发出通知。

watch:是否需要注册一个watcher,如果为true则默认zookeeper客户端上文中的watcher。false则不使用watcher。

stat:指定数据节点的节点状态信息。


注意:当子节点被添加或删除时,服务器就会触发一个NodeChildrenChanged类型的事件通知,该通知中不包含最新的节点列表。客户端必须主动重新获取。watcher是一次性的,即触发后失效,因此客户端需要反复注册。


//遍历节点下的所有数据
List<String> nodeChildName=zookeeper.getChildren("/testRoot", false);

for(String path:nodeChildName){

    //获得节点的数据
    byte[] data=zookeeper.getData(("/testRoot/"+path), false, null);
    
    //修改节点的数据
    zookeeper.setData("/testRoot/"+path, (path+"newData").getBytes() , -1);
    
}

 


7. 删除节点(znode)数据:delete

参数说明:

path:路径

version:版本号,-1则跳过版本检查;


//删除节点,只能删除叶子节点
zk.delete("/testRoot/children", -1);

//关闭连接
zk.close();


注意:在zookeeper中,不允许级联删除。必须先删除子节点,再删除其父节点。



二、Watcher

zookeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher。watcher是监听数据发送了某些变化,有对应的事件类型和状态类型。

·事件类型EventType:(zonde节点相关的)

·状态类型KeeperState:(与客户端实例相关的)


watcher的特性:一次性、客户端串行执行、轻量。

一次性:zookeeper有watch事件,是一次性触发的,当watch监视的数据发生变化时,通知设置了该watch的client,即watcher,由于zookeeper的监控都是一次性的所以每次必须设置监控。

客户端串行执行:客户端watcher回调的过程是一个串行同步的过程。

轻量:WatchedEvent是zookeeper整个Watcher通知机制的最小通知单元,包括三部分:通知状态、事件类型和节点路径。也就是说Watcher通知只会告诉客户端发生了事件而不会告诉其具体内容,需要客户自己进行获取。


public class WatchedEvent {
    final private KeeperState keeperState;
    
    final private EventType eventType;
    
    private String path;
}


设置监听的方法有以下方法


1)监听节点的创建、修改、删除,对应的事件为:NodeDataChanged\NodeCreated\NodeDeleted


zookeeper.exists(path, true);

zookeeper.getData(path, true, null);


2)监听子节点创建和删除,对应的事件:NodeChildrenChanged


zookeeper.getChildren(path, true);




至此Zookeeper的原生API的基本操作已将讲完,下一章节主要讲curator框架操作zookeeper



--结束END--

本文标题: zookeeper-3. java操作z

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

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

猜你喜欢
  • zookeeper-3. java操作z
    对于Zookeeper的建立连接、增删改查、以及监视节点的变化操作。一、简单实例操作zookeeper原生API1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器。参数说明:connectStri...
    99+
    2023-01-31
    操作 zookeeper java
  • 【ZooKeeper Notes 3】Z
    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合。通过这些原语言的组合使用,能够帮助我们解决更高层次的分布式问题,关...
    99+
    2023-01-31
    ZooKeeper Notes
  • Zookeeper的Java API操作(一)
    环境搭建 创建一个普通的Maven项目 导入log4j.properties日志文件到项目的根目录或者resource文件下。 在pom.xml中添加Zookeeper的相关依赖: org.apache.zookeeper...
    99+
    2021-02-15
    Zookeeper的Java API操作(一)
  • java操作zookeeper实例代码
    本篇内容主要讲解“java操作zookeeper实例代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java操作zookeeper实例代码”吧!package...
    99+
    2024-04-02
  • 如何使用Java操作Zookeeper
    目录简介使用zkclient操作Zookeeper节点监听简介 Java操作Zookeeper有很多种方式,如zookeeper、zkclient、curator等等,下面介绍下使...
    99+
    2024-04-02
  • 怎么使用Java操作Zookeeper
    这篇文章给大家分享的是有关怎么使用Java操作Zookeeper的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象...
    99+
    2023-06-14
  • Java 3:顺序表的操作
    顺序表常见操作有插入、删除、查找、修改。一、插入:1.插入有头插、尾插、任意位置插入。在插入时要注意下标的取值在顺序表长度范围内。所以最好在插入之前进行扩容操作。2.在头插时要注意先将原数组的元素从后往前依次向后移动。因为如果从前往后开始移...
    99+
    2023-01-31
    顺序 操作 Java
  • java连接zookeeper的3种方式小结
    目录java连接zookeeper3种方式1、使用zookeeper原始api2、使用ZkClient客户端连接,这种连接比较简单3、使用curator连接Java集成zookeep...
    99+
    2024-04-02
  • Python -- 操作字符串[3/3]
     1,splitlines() yuan@ThinkPad-SL510:~$ ipython -nobanner  In [1]: multiline_string = """This    ...: is    ...: a multi...
    99+
    2023-01-31
    字符串 操作 Python
  • ZooKeeper命令及JavaAPI操作代码
    目录ZooKeeper数据模型ZooKeeper服务端常用命令ZooKeeper客户端命令使用Curator API操作Zookeeper建立连接Watch事件监听分布式锁实现概述Z...
    99+
    2023-03-14
    ZooKeeper JavaAPI操作 ZooKeeper命令
  • 3 Python文件操作
    open 以什么编码方式存储文件,就以什么编码方式打开 f = open('d:\模特主妇护士班主任.txt',encoding='utf-8') # 绝对路径打开 f.close() f = open('模特主妇护士班主任',enc...
    99+
    2023-01-31
    操作 文件 Python
  • python 3 列表操作
        创建列表subject = ["Liunx","python","web","java"]#读取列表 print(subject) #打印显示 ['Liunx', 'python', 'web', 'java'] #列表的切片...
    99+
    2023-01-31
    操作 列表 python
  • 3. PowerShell --基本操作
    1.  PowerShell控制台打开PowerShell,可以完成DOS,cmd 等操作;显示如下界面:2. cmdlet命令它使用“动词-名词”命名的形式作为一个cmdlet命令查看当前powershell中的所有cmdlet 命令: ...
    99+
    2023-01-31
    操作 PowerShell
  • hadoop3自学入门笔记(3)-java 操作hdfs
    1.core-site.xml fs.defaultFS hdfs://192.168.3.61:9820 hadoop.tmp.dir /op...
    99+
    2014-10-06
    hadoop3自学入门笔记(3)-java 操作hdfs
  • Linux操作系统中如何安装ZooKeeper
    本文将为大家详细介绍“Linux操作系统中如何安装ZooKeeper”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux操作系统中如何安装ZooKeeper”能够给你意想不到的收获,请大家跟着小编的思路慢...
    99+
    2023-06-28
  • Zookeeper集群搭建以及python操作zk
    ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper设计目的最终一致性:client不论连接到那个Server,展示给它的都是同一个...
    99+
    2023-01-31
    集群 操作 Zookeeper
  • ZooKeeper命令及JavaAPI操作代码分析
    本文小编为大家详细介绍“ZooKeeper命令及JavaAPI操作代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“ZooKeeper命令及JavaAPI操作代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • 计算机中ctrl z的反操作是什么
    这篇文章将为大家详细讲解有关计算机中ctrl z的反操作是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ctrl z的反操作是“ctrl+y”或者“ctrl+alt+z”;“ctrl+z”一般是“撤消...
    99+
    2023-06-14
  • 文本操作3(cut,sort)
    检查当前系统中的各种shell程序,统计出它们各被多少用户所使用,并把统计结果按照从多到少排序打印出来 每个用户所使用登录的shell都保存在系统文件/etc/passwd中,我们已经知道这个文件中每一行对应一个用户的信息,并且最后一...
    99+
    2023-01-31
    文本 操作 sort
  • git入门(3.文件操作)
    三、GIT文件操作  版本控制就是对文件的版本控制,对于Linux来说,设备,目录等全是文件,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。文件状态  GIT仓库...
    99+
    2023-01-31
    入门 操作 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作