返回顶部
首页 > 资讯 > 后端开发 > Python >Java调用Zookeeper的实现步骤
  • 489
分享到

Java调用Zookeeper的实现步骤

2024-04-02 19:04:59 489人浏览 安东尼

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

摘要

目录watch机制常用apiJAVA调用watch机制 ZooKeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性。 Zookeeper所有的

watch机制

ZooKeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性。

Zookeeper所有的读操作getData(), getChildren()和 exists()都可以设置监听(watch)。【写操作则是不能设置监视点的。】

Watch的三个关键点:

  • 一次有效:当设置监视的数据发生改变时,该监视事件会被发送到客户端,并且该监听将会停止,除非重启注册监听;
  • 顺序保证:网络延迟或者其他因素可能导致不同的客户端在不同的时刻感知某一监视事件,但是不同的客户端所看到的一切具有一致的顺序;
  • 可以监听数据和子节点:getData()和 exists()可以设置监听数据变化;getChildren 可以设置监听子节点变化;

常用API



public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException


public String create(String path, byte[] data, List<ACL> acl, CreateMode createMode) throws KeeperException, InterruptedException


public List<String> getChildren(String path, boolean watch) throws KeeperException, InterruptedException


public byte[] getData(String path, Watcher watcher, Stat stat) throws KeeperException, InterruptedException


public void getData(String path, boolean watch, AsyncCallback.DataCallback cb, Object ctx)


public Stat setData(String path, byte[] data, int version) throws KeeperException, InterruptedException


public Stat exists(String path, boolean watch) throws KeeperException, InterruptedException


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

JAVA调用

初始化


try {
  ZooKeeper zooKeeper = new ZooKeeper("172.23.34.13:2181", 15000, event -> {
        if (event.getType() == Watcher.Event.EventType.None && event.getState() == Watcher.Event.KeeperState.SyncConnected) {
            System.out.println("Connectted successful.");
        }
    });
} catch (IOException e) {
    e.printStackTrace();
}

创建节点: create


@Test
public void create() throws KeeperException, InterruptedException {
    //参数:1,节点路径; 2,要存储的数据; 3,节点的权限; 4,节点的类型
    String nodePath = zooKeeper.create("/java/2183", "This is Java Node 2183.".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    System.out.println(nodePath);
}

获取子节点: ls


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

同步获取节点内容: get


@Test
public void getData() throws KeeperException, InterruptedException {
    String path = "/java";
    byte[] bytes = zooKeeper.getData(path, event -> {
        if (event.getType() == Watcher.Event.EventType.NodeDataChanged && path.equals(event.getPath())) {
            System.out.println("Date changed.");
        }
    }, null);
    System.out.printf("The data of %s is : %s \n",path, new String(bytes));
}

异步获取节点内容: get


@Test
public void getDataAsync() {
    String path = "/java";
    zooKeeper.getData(path, false, new AsyncCallback.DataCallback() {
        @Override
        public void processResult(int i, String s, Object o, byte[] bytes, Stat stat) {
            System.out.printf("The data of %s is : %s \n",path, new String(bytes));
        }
    },"1000");

    //休眠20秒,查看响应结果
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

指定版本号更新数据:set


@Test
public void setData() throws KeeperException, InterruptedException {
    Stat stat = zooKeeper.setData("/java", "This is from java.".getBytes(), -1);
    //更新节点后,version会自动+1。故,返回值为0
    System.out.println(stat.getAversion());
}

多线程下更新数据:set


@Test
public void setDataThread() throws KeeperException, InterruptedException {
    String path = "/java";
    Stat stat = new Stat();
    //1,先获取节点的当前版本
    zooKeeper.getData(path,false,stat);
    //2,在当前版本的基础上修改节点内容
    zooKeeper.setData(path, "This is from java.".getBytes(), stat.getVersion());
}

判断节点是否存在


@Test
public void exists() throws KeeperException, InterruptedException {
    Stat stat = zooKeeper.exists("/java", false);
    if (stat == null) {
        System.out.println("Not Exists.");
    }else {
        System.out.println("Exists.");
    }
}

删除节点


@Test
public void delete() throws KeeperException, InterruptedException {
    //version = -1 : 匹配所有的版本
    zooKeeper.delete("/java/2182", -1);
}

到此这篇关于Java调用Zookeeper的实现步骤的文章就介绍到这了,更多相关Java调用Zookeeper内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java调用Zookeeper的实现步骤

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

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

猜你喜欢
  • Java调用Zookeeper的实现步骤
    目录watch机制常用APIJAVA调用watch机制 Zookeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性。 Zookeeper所有的...
    99+
    2024-04-02
  • SpringBoot调用python接口的实现步骤
    目录一、前言二、方法1、代码2、运行一、前言 SpringBoot作为后端开发框架,有强大且方便的处理能力。但是作为一个结合数据分析+前台展示的网站来说,后端的数据处理模块使用py...
    99+
    2024-04-02
  • java调用FFmpeg实现视屏压缩功能的详细步骤
    目录前言实现步骤一、在windows系统中下载对应的FFmpeg二、FFmpeg压缩视屏命令三、java实现FFmpeg命令调用 注意事项  1.文件名...
    99+
    2024-04-02
  • 使用spyder3调试python程序的实现步骤
    目录Spyder官方文档地址开始调试打断点的两种姿势普通的breakpoint带条件的breakpoint总结一下刚刚所讲的剩下的一些细节Step IntoReturn说是简明教程,...
    99+
    2024-04-02
  • java 调用本地扬声器的步骤
    目录实现方式另述更新实现方式 接下来就对这个小功能进行分析和实现。先写一个Demo。 1.首先,我们需要一个dll作为辅助。这里解释一下dll的含义(DLL(Dynamic Lin...
    99+
    2024-04-02
  • java连接zookeeper实现zookeeper教程
    目录java连接zookeeper实现zookeeperZookeeperJavaAPI基本操作1.连接客户端2.恢复回话3.创建节点4.修改节点5.删除节点6.查询节点7.查询子节...
    99+
    2024-04-02
  • Java启动Tomcat的实现步骤
    目录目标:实现:一、前期准备1、加入依赖2、定义Servlet类3、定义Servlet类4、启动Tomcat并测试总结流程图重点及易错点目标: 学习使用java代码启动Tomcat。...
    99+
    2024-04-02
  • java调用webservice的.asmx接口的使用步骤
    目录前言一、接口类型二、使用步骤1.访问方式2.导入的maven前言 接触到一个.asmx结尾的webservice接口,为了增加记忆决定记录下来。 一、接口类型 已.asmx结尾的...
    99+
    2024-04-02
  • java异步调用怎么实现
    在Java中,可以通过多线程、回调接口、Future和CompletableFuture等方式来实现异步调用。1. 多线程:创建一个...
    99+
    2023-09-16
    java
  • java怎么实现异步调用
    在Java中,可以使用多种方法实现异步调用,下面列举了其中的两种常用方式: 使用线程池:可以使用Java中的`ExecutorSe...
    99+
    2023-10-25
    java
  • 实现AJAX异步调用和局部刷新的基本步骤
    目录引言1、创建XMLHttpRequest对象2、创建HTTP请求3、设置响应HTTP请求状态变化的函数4、设置获取服务器返回数据的语句5、发送HTTP请求6、局部更新7、完整的A...
    99+
    2024-04-02
  • java发送短信的实现步骤
    一、在中国网建中注册用户:本程序是通过中国网建提供的SMS短信平台实现的,该平台新用户注册可以拥有免费5条普通短信和3条彩信,足够进行尝试和体验了。中国网建注册地址:http://sms.webchinese.cn/reg.shtml;二、...
    99+
    2023-05-31
    java 发送短信 ava
  • Java中如何实现异步调用
    Java中如何实现异步调用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。@Test一、创建线程public void test0() throws...
    99+
    2023-06-02
  • docker搭建Zookeeper集群的方法步骤
    目录0.前言1.前提2.开始搭建解释创建zoo.cfg3.docker搭建1.docker创建网络2.启动第1个zk节点3.启动第2个zk节点4.启动第3个zk节点4.访问节点1.进...
    99+
    2024-04-02
  • java异步调用的4种实现方法
    目录一.利用多线程直接new线程使用线程池二.采用Spring 的异步方法去执行(无返回值)@Async注解可以用在方法上,也可以用在类上,用在类上,对类里面所有方法起作用三.采用S...
    99+
    2024-04-02
  • SQL SERVER调用CLR类库的实现步骤是怎样的
    SQL SERVER调用CLR类库的实现步骤是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SQL Server调用CLR类库实现分为一下几个步骤:1、在...
    99+
    2023-06-17
  • 使用Java调用Yolo模型的方法与步骤
    目录 一、Yolo模型简介 二、Java调用Yolo模型的方法 1. 安装OpenCV 2. 下载Yolo模型文件 3. 编写Java代码 三、Yolo模型的应用场景 1. 自动驾驶 2. 安防监控 3. 医疗诊断 4. 工业生产 四、总结...
    99+
    2023-08-31
    计算机视觉 深度学习 opencv
  • Spring Cloud调用Ribbon的步骤
    目录一、简介1. 是什么2. 负载均衡2.1 集中式LB2.2 进程内LB二、实验1. RestTemplate1.1 加入到IOC容器1.2 RestTemplate 远程调用1....
    99+
    2024-04-02
  • Python调用jar包的步骤
    Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。在软件开发过程中,有时需要在 Python 项目中利用既有的 Java 代码,已达到节省时间和开发成本的目...
    99+
    2023-01-31
    步骤 Python jar
  • java实现封装的步骤是什么
    Java中实现封装的步骤如下:1. 声明私有的实例变量:将需要封装的属性声明为私有的,即使用private关键字修饰属性。2. 提供...
    99+
    2023-08-24
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作