zookeeper之java API使用

ZooKeeper完全解析(三) 使用Java操作ZooKeeper   在上一篇中,我们讲解了ZooKeeper的相关操作命令,链接为 ZooKeeper完全解析(二) zooKeeper命令详解,这一篇中,我们将会详细的讲解如何使用Java操作ZooKeeper。 一、引入依赖与建立连接:   注意ZooKeeper连接池的版本最好与使用的ZooKeeper版本一致,比如使用的ZooKeeper版本为 3.4.13,那么引入的连接池依赖即为: <d... 阅读详情

节点创建

package com.zookeeper;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;

public class CreateNodeSync {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {

                        doSomeThing();
                    }
                }
            });
            System.out.println("state:{}" + zooKeeper.getState());
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }


    }

    private static void doSomeThing() {
        String path = null;
        try {
            path = zooKeeper.create("/node_4", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        catch (KeeperException e) {
            e.printStackTrace();
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("path:" + path);
    }
}

 

同步异步创建:

package com.zookeeper;

import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;

public class CreateNodeASync {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                        doSomeThing();
                    }
                }
            });
            System.out.println("state:{}" + zooKeeper.getState());
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    private static void doSomeThing() {
        zooKeeper.create("/node_5", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new IStringClassback(), "异步创建");
    }

    //异步调用,需要 一个回调函数
    static class IStringClassback implements AsyncCallback.StringCallback {

        /**
         * @param rc 返回码,如果异步创建成功,返回0
         * @param path  创建节点的完整路径
         * @param ctx  异步调用的上下文,。。也就是上面传下来的“创建”字符串
         * @param name  服务端返回的已经创建节点的真实路径,如果是顺序节点,那么和path不一致
         */
        public void processResult(int rc, String path, Object ctx, String name) {

            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("rc=" + rc).append("\n");
            stringBuilder.append("path=" + path).append("\n");
            stringBuilder.append("ctx=" + ctx).append("\n");
            stringBuilder.append("name=" + name).append("\n");
            System.out.println(stringBuilder.toString());

        }
    }
}

运行结果:

同步获取:

package com.zookeeper;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

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

public class GetChildSync {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {

                        doSomeThing();
                    }
                }
            });
            System.out.println("state:{}" + zooKeeper.getState());
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private static void doSomeThing() {
        List<String> children = null;
        try {
            //false表示不需要需要关注子节点的变化
            children = zooKeeper.getChildren("/", false);
        }
        catch (KeeperException e) {
            e.printStackTrace();
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("children:" + children);
    }
}

运行结果:

如果需要关注子节点的变化:

package com.zookeeper;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;

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

public class GetChildSync {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                        if (watchedEvent.getType() == Event.EventType.None && null == watchedEvent.getPath()) {
                            doSomeThing();
                        } else {
                            if (watchedEvent.getType() == Event.EventType.NodeChildrenChanged) {
                                try {
                                    System.out.println(zooKeeper.getChildren(watchedEvent.getPath(), true));
                                }
                                catch (KeeperException e) {
                                    e.printStackTrace();
                                }
                                catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }

                    }
                }
            });
            System.out.println("state:{}" + zooKeeper.getState());
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private static void doSomeThing() {
        List<String> children = null;
        try {
            //false表示不需要需要关注子节点的变化
            children = zooKeeper.getChildren("/", true);
        }
        catch (KeeperException e) {
            e.printStackTrace();
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("children:" + children);
    }
}

运行结果:

通过服务端给根节点添加一个子节点,就会打印出来:

异步获取:

package com.zookeeper;

import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

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

public class GetChildASync {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                        if (watchedEvent.getType() == Event.EventType.None && null == watchedEvent.getPath()) {
                            doSomeThing();
                        } else {
                            if (watchedEvent.getType() == Event.EventType.NodeChildrenChanged) {
                                zooKeeper.getChildren(watchedEvent.getPath(), true, new ChildrenClallBack(), "异步获取");
                            }
                        }

                    }
                }
            });
            System.out.println("state:{}" + zooKeeper.getState());
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    static class ChildrenClallBack implements AsyncCallback.Children2Callback {
        /**
         *
         * @param rc  返回码,如果异步创建成功,返回0
         * @param path  创建节点的完整路径
         * @param ctx  异步调用的上下文,。。也就是上面传下来的“异步获取”字符串
         * @param children
         * @param stat
         */
        public void processResult(int rc, String path, Object ctx, List<String> children, Stat stat) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("rc=" + rc).append("\n");
            stringBuilder.append("path=" + path).append("\n");
            stringBuilder.append("ctx=" + ctx).append("\n");
            stringBuilder.append("children=" + children).append("\n");
            stringBuilder.append("stat=" + stat).append("\n");
            System.out.println(stringBuilder.toString());
        }
    }
    private static void doSomeThing() {
        //false表示不需要需要关注子节点的变化
        zooKeeper.getChildren("/", true, new ChildrenClallBack(), "异步获取");
    }
}

运行结果:

同步获取节点数据:

package com.zookeeper;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;

public class GetDataSync {

    private static ZooKeeper zooKeeper;
    private static Stat stat = new Stat();

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                        if (watchedEvent.getType() == Event.EventType.None && null == watchedEvent.getPath()) {
                            doSomeThing();
                        } else {
                            if (watchedEvent.getType() == Event.EventType.NodeDataChanged) {
                                try {
                                    System.out.println(new String(zooKeeper.getData(watchedEvent.getPath(), true, stat)));
                                }
                                catch (KeeperException e) {
                                    e.printStackTrace();
                                }
                                catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }

                    }
                }
            });
            System.out.println("state:{}" + zooKeeper.getState());
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private static void doSomeThing() {
        byte[] data = null;
        try {
            //false表示不需要需要关注子节点的变化
            data = zooKeeper.getData("/node_5", true, stat);
        }
        catch (KeeperException e) {
            e.printStackTrace();
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("data:" + new String(data));
        System.out.println("stat:" + stat);
    }
}

运行结果:

异步获取节点数据:

package com.zookeeper;

import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;

public class GetDataASync {

    private static ZooKeeper zooKeeper;

    public static void main(String[] args) {
        try {
            zooKeeper = new ZooKeeper("192.168.40.135:2181", 5000, new Watcher() {
                public void process(WatchedEvent watchedEvent) {
                    if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                        if (watchedEvent.getType() == Event.EventType.None && null == watchedEvent.getPath()) {
                            doSomeThing();
                        } else {
                            if (watchedEvent.getType() == Event.EventType.NodeDataChanged) {
                                zooKeeper.getData(watchedEvent.getPath(), true, new DataClallBack(), "异步获取节点数据");
                            }
                        }

                    }
                }
            });
            Thread.sleep(Integer.MAX_VALUE);
        }
        catch (IOException e) {
            System.out.println("connect zk failed");
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    static class DataClallBack implements AsyncCallback.DataCallback {

        public void processResult(int rc, String path, Object ctx, byte[] bytes, Stat stat) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("rc=" + rc).append("\n");
            stringBuilder.append("path=" + path).append("\n");
            stringBuilder.append("ctx=" + ctx).append("\n");
            stringBuilder.append("bytes=" + new String(bytes)).append("\n");
            stringBuilder.append("stat=" + stat).append("\n");
            System.out.println(stringBuilder.toString());
        }
    }

    private static void doSomeThing() {
        //false表示不需要需要关注子节点的变化
        zooKeeper.getData("/node_5", true, new DataClallBack(), "异步获取节点数据");
    }
}

 

ZooKeeper 实战:ZooKeeper Java API ZooKeeper 大部分 API 都提供了同步和异步方法。同步方法一般会有返回值,并且会抛出相应的异常。异步方法没有返回值,也不会抛出异常 阅读详情

相关推荐

Zookeeper公司内部交流学习、培训总结

内容包括: 1)Zookeeper公司内部交流学习、培训PPT【ZooKeeper前言、是什么&为什么要用、ZAB、4大应用场景分析&JAVA实例Demo Code、3.4.9版本源代码Eclipse创建】 2)Eclipse 支持的 3.4.9版本源代码 JAVA Project

zookeeper 与 java 交互小结

不多说,直接上代码。关于zookeeper 的一些介绍和场景,会过一段时间总结发出来。这里是java 操作zookeeper 的api。默认已经在本机安装好了zookeeper 的serverpom.xml 如下<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zooke

哎幽的成长 5万+

实测对比:Gromacs GPU版vsCPU版性能差异到底有多大?2023最新基准测试

本文通过2023年最新基准测试,详细对比了Gromacs GPU版与CPU版的性能差异。测试显示,GPU版本在计算速度上可提升54倍,同时显著降低内存需求和能耗成本。文章还提供了GPU版安装优化实践和硬件选购指南,为计算生物学研究提供关键参考。

weixin_29243063的博客 334

Zookeeper入门——Zookeeper的Java客户端API(1)

搜了一些Zookeeper的相关书籍和博客,但好多基本都是讲Zookeeper的架构、用途,尤其分布式中的应用讲的真的是天花乱坠,但看完还是不会写代码,搞得自己理论丰富的一批,实践完全懵逼。对于Zookeeper的Java客户端API使用,基本没有涉及或者讲清楚,要么就是讲的很模糊。果然还是得自己来,通过Zookeeper的API来学习一下Zookeeper的功能,然后依据这些功能去思考怎么用?...

江左煤郎的博客 4691

Mixly米思齐——超声波测距控制LED灯

为了更加地贴近中小学信息技术的课程,我们用米思齐做了一个实验——根据距离的远近开启警报灯(利用超声波测出距离)。 实验硬件准备 arduino uno R3 、USB 数据线、YFROBOT UNO I/O扩展板、YFROBOT超声波传感器模块、模块3P连接线x1、LED灯x1 硬件连接图如下: 在arduino uno R3 上再接一个LED灯,实物图如下: 在本次实验中,LE...

Janise_的博客 9978

基于verilog实现AXI4协议接口读写功能

AXI4是ARM公司推出的第四代AMBA总线协议,专为高带宽、低延迟的片上通信设计,广泛应用于FPGA、处理器及DSP等复杂系统,AXI4包含三中形态,分别为AXI4:标准版本,支持高带宽内存映射通信。AXI4-Lite:简化版,用于寄存器等简单设备的轻量级访问。AXI4-Stream:无地址协议,适用于高速数据流传输(如视频、音频)。本文章主要介绍AXI4协议的代码实现1. 写地址通道定义2. 写数据通道定义3. 写响应通道定义4. 读地址通道定义5. 读数据通道定义。

junpingc的博客 628

ZooKeeper之Java API的基本使用以及应用场景的实现

介绍ZooKeeper中Java API的基本使用,以及对Zookeeper常见应用场景的具体实现。

积跬步,至千里。 1058

2025 年国人友好神刊盘点:20 本审稿快、分区高的 SCI 期刊,速抢发文先机!

科睿唯安最新发布的 2024 年影响因子(2025 年公布)显示,多本 TOP 期刊影响因子迎来大幅上涨!尤其是对国人友好的期刊,因审稿效率高、版面费亲民、国人发文占比超 40%,成为科研人员投稿热门。本文精选 20 本潜力神刊,涵盖Cell 子刊、顶流期刊、黑马期刊、性价比之王及新晋分区 TOP,附完整的影响因子、中科院分区、审稿周期、收稿方向攻略,助你抢占发文先机!

good_rrrrr的博客 5560

ZooKeeper的Java API操作

        本篇博客小菌为大家带来期待已久的关于ZooKeeper的JavaAPI操作!!!         在向大家展示代码之前,先为大家介绍几个需要使用到的类! org.apache.zookeeper.Zookeeper Z...

大数据梦想家 5644

转录组分析中的Fastp和FastQC:如何快速检测数据质量并优化流程

本文深入探讨了转录组分析中数据质量控制的核心流程,重点介绍了Fastp和FastQC两款工具的组合应用。FastQC负责对原始测序数据进行全面质量评估,生成可视化报告;Fastp则能一站式完成接头切除、低质量序列过滤、长度筛选等关键质控步骤。文章提供了详细的参数解读、实战脚本和自动化流程构建指南,帮助研究人员快速检测数据质量并优化预处理流程,为下游的差异表达等分析奠定可靠基础。

weixin_28452161的博客 181

用angr找到strcpy的栈溢出漏洞

这篇文章其实是分析angr文档里给出的一个挖漏洞的小例子。 原文链接在此:https://docs.angr.io/examples#beginner-vulnerability-discovery-example-strcpy_find 这是第一个用angr在二进制里找可利用条件的教程。第一个例子是一个非常简单的程序。这个angr脚本会从程序的entry到strcpy找到一条路径。(只有我们能够控制strcpy的参数的时候) 为了找到正确的路径,angr需要去算一个密码参数,算这个密码,angr只要2s

^_^ 1220

ZooKeeper Java API

org.apache.zookeeper.Zookeeper    Zookeeper是在Java中客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。 org.apache.zookeeper.Watcher    Watcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类...

weixin_45749011的博客 2万+

021、反激变换器的软启动设计

本文分享了反激变换器软启动设计的实践经验。作者通过一次上电炸机事故引出软启动的重要性,分析了启动瞬间电流冲击和环路饱和问题。介绍了三种软启动方案:效果差的RC电路、推荐使用的数字芯片方案以及分立元件实现方法,重点指出数字方案的一致性优势。文章还探讨了软启动与过流保护的配合问题,提供了实测波形、温度影响等调试要点,并总结出软启动时间选择、批量生产一致性等实用建议。最后强调软启动是电源可靠性的关键设计,不应为节省成本而忽略。全文包含多个工程实践细节,对电源设计人员具有重要参考价值。(149字)

Jack010169的博客 176

Java API操作ZooKeeper

ZooKeeper学习笔记(十二): 附Demo:建议使用更好的Curator。参考:ZooKeeper客户端Curator的基本使用 package zookeeper; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.io.IOException; import java.io.UnsupportedEnc...

扛麻袋的少年的博客 1328

SerDes系列之码间干扰的概念

码间干扰出现在传输介质或者元器件的带宽小于所发送的信号带宽时,从时域角度来看,传输路径的带宽限制会使发送信号的上升沿的变化速率变慢,有可能对信号造成高频衰减,并影响到实际数字逻辑电平的转换时序。

一只豌豆象的博客 3467

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Zookeeper的Shell 客户端操作和zookeeper java api 代码

Zookeeper的Shell 客户端操作和zookeeper java api 代码Zookeeper的Shell 客户端操作ZooKeeper Java APIzookeeper选举机制 Zookeeper的Shell 客户端操作 运行 zkCli.sh –server ip:2181 命令 说明 参数 create [-s] [-e] path data acl 创建Znode -s 指定是顺序节 点 -e 指定是临时节 点 ls path [watch] 列出Path下所有子Znode get

Maynor的博客 3159

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

快速掌握Zookeeper及Java API

在开发分布式应用程序时,Apache ZooKeeper作为分布式协调服务起着至关重要的作用。特别是对于存储共享配置、选择主节点等应用场景。ZooKeeper还提供了优雅的javaAPI,用于客户端应用程序代码与ZooKeeper znode间无缝通信。

neweastsun的专栏 1341

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

zookeeper java开发_使用ZooKeeper Java API编程

Tips本章的代码在Linux操作系统下进行测试,运行ZooKeeper服务器实例的版本为3.4.6。开发应用程序的ZooKeeper Java绑定主要由两个Java包组成:org.apache.zookeeperorg.apache.zookeeper.dataorg.apache.zookeeper包由ZooKeeper监视的接口定义和ZooKeeper的各种回调处理程序组成。 它定义了Zoo...

weixin_35897916的博客 565

ZooKeeper常用Java的API

第一步导入jar包 下面就是Zookeeper,Java常用的API public class ZookeeperDemo { public static void main(String[] args) throws Exception { Watcher watcher = new Watcher() { @Override public void process(WatchedEvent watchedEvent) {

v3424的博客 569

使用JAVA API调用ZooKeeper

一、环境准备及创建会话实例 JAR包 使用JAVAAPI调用ZooKeeper时必须要导入对应的jar包 对应的jar包:ZooKeeper-3.x.x.jar(其中的x需要依据版本而定。注意:使用3.4.14版本的ZooKeeper时,如何使用3.4.14的jar包,创建连接时需要把session超时时间设置长一点否则会报错,改用3.4.10版本的...

advent86的专栏 931

Zookeeper Java API

1. 概述 可以通过Java的AIP作为zookeeper客户端,实现与zookeeper服务器的交互。 客户端应该遵循以下步骤,与服务器进行清晰和干净的交互 连接到zookeeper服务器。zookeeper服务器为客户端分配会话ID。 定期向服务器发送心跳。否则,zookeeper服务器将过期会话ID,客户端需要重新连接。 只要会话ID处于活动状态,就可以获取/设置znode。 所有任务完成后,断开与zookeeper服务器的连接。如果客户端长时间不活动,则 zookeeper服务器将自动断开客户端

weixin_42524843的博客 863

【Zookeeper系列三】ZooKeeper Java API使用

ZooKeeper提供了Java和C的binding. 本文关注Java相关的API. 1 准备工作 拷贝ZooKeeper安装目录下的zookeeper.x.x.x.jar文件到项目的classpath路径下. 2 创建连接和回调接口 首先需要创建ZooKeeper对象, 后续的一切操作都是基于该对象进行的. ZooKeeper(String connectString, in

zhangyuan19880606的专栏 3792

六、ZooKeeper Java API操作

这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端框架 Curator ,解决了很多Zookeeper客户端非常底层的细节开发工作。对zookeeper的底层api的一些封装封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器等。

zhuyangyong的博客 1675

ZooKeeper之Java API

ZooKeeper作为一个分布式服务框架,本身使用Java编写,也对多种编程提供了API,本文涉及是通过java api来操作zookeeper. 1.创建ZooKeeper会话实例 package yzr.zk; import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.WatchedEvent; im

YZR的博客 889
上一篇: zookeeper之zkCli.sh的使用
下一篇: zookeeper之java API修改数据及权限
给自己加加油
博客等级 码龄8年 302粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值