依赖:

        <dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.</version>
</dependency>

代码:


package com.nzh.springboot_webflux.util;

import java.util.List;
import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat; public class BaseZookeeper implements Watcher {
private ZooKeeper zookeeper;
/**
*      * 超时时间
*     
*/
private static final int SESSION_TIME_OUT = 2000;
private CountDownLatch countDownLatch = new CountDownLatch(1); @Override
public void process(WatchedEvent event) {
if (event.getState() == KeeperState.SyncConnected) {
System.out.println("Watch received event");
countDownLatch.countDown();
}
} /**
* 连接zookeeper
*     * @param host
*     * @throws Exception
*    
*/
public void connectZookeeper(String host) throws Exception {
zookeeper = new ZooKeeper(host, SESSION_TIME_OUT, this);
countDownLatch.await();
System.out.println("zookeeper connection success");
} /**
*     * 创建节点
*     * @param path
*     * @param data
*     * @throws Exception
*    
*/
public String createNode(String path, String data) throws Exception {
return this.zookeeper.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//临时目录节点EPHEMERAL 永久目录节点PERSISTENT
} /**
*     * 获取路径下所有子节点
*     * @param path
*     * @return
*     * @throws KeeperException
*     * @throws InterruptedException
*    
*/
public List<String> getChildren(String path) throws KeeperException, InterruptedException {
List<String> children = zookeeper.getChildren(path, false);
return children;
} /**
*     * 获取节点上面的数据
*     * @param path  路径
*     * @return
*     * @throws KeeperException
*     * @throws InterruptedException
*    
*/
public String getData(String path) throws KeeperException, InterruptedException {
byte[] data = zookeeper.getData(path, false, null);
if (data == null) {
return "";
}
return new String(data);
} /**
*     * 设置节点信息
*     * @param path  路径
*     * @param data  数据
*     * @return
*     * @throws KeeperException
*     * @throws InterruptedException
*    
*/
public Stat setData(String path, String data) throws KeeperException, InterruptedException {
Stat stat = zookeeper.setData(path, data.getBytes(), -1);
return stat;
} public void updateNode(String path, String data) throws KeeperException, InterruptedException {
zookeeper.setData(path, data.getBytes(), -1);
} /**
*     * 删除节点
*     * @param path
*     * @throws InterruptedException
*     * @throws KeeperException
*    
*/
public void deleteNode(String path) throws InterruptedException, KeeperException {
zookeeper.delete(path, -1);
} /**
*     * 获取创建时间
*     * @param path
*     * @return
*     * @throws KeeperException
*     * @throws InterruptedException
*    
*/
public String getCTime(String path) throws KeeperException, InterruptedException {
Stat stat = zookeeper.exists(path, false);
return String.valueOf(stat.getCtime());
} /**
*     * 获取某个路径下孩子的数量
*     * @param path
*     * @return
*     * @throws KeeperException
*     * @throws InterruptedException
*    
*/
public Integer getChildrenNum(String path) throws KeeperException, InterruptedException {
int childenNum = zookeeper.getChildren(path, false).size();
return childenNum;
} /**
*     * 关闭连接
*     * @throws InterruptedException
*    
*/
public void closeConnection() throws InterruptedException {
if (zookeeper != null) {
zookeeper.close();
}
} public static void main(String[] args) { BaseZookeeper zookeeper = new BaseZookeeper();
try {
zookeeper.connectZookeeper("127.0.0.1:2181");
List<String> children = zookeeper.getChildren("/");
zookeeper.createNode("/msg", "你好世界");//创建节点
System.out.println(zookeeper.getData("/msg"));//获取节点
System.out.println(children);//查询所有节点
} catch (Exception e) {
e.printStackTrace();
} } }
 

启动服务:

启动客户端:

查询所有节点:

zookeeper 使用命令

help命令
显示客户所支持的所有命令,如: ZooKeeper -server host:port cmd args connecthost:port getpath [watch] lspath [watch] setpath data [version] rmrpath delquota[-n|-b] path quit printwatcheson|off create[-s] [-e] path data acl statpath [watch] close ls2path [watch] history listquotapath setAclpath acl getAclpath syncpath redocmdno addauthscheme auth deletepath [version] setquota-n|-b val path connect命令
连接zk服务端,与close命令配合使用可以连接或者断开zk服务端。 如connect 127.0.0.1:2181 get命令
获取节点信息,注意节点的路径皆为绝对路径,也就是说必要要从/(根路径)开始。 如get / hello world cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x5 mtime = Thu Apr 27 15:09:00 CST 2017 pZxid = 0xc cversion = 1 dataVersion = 2 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 11 numChildren = 1 详解: hello world为节点数据信息 cZxid节点创建时的zxid ctime节点创建时间 mZxid节点最近一次更新时的zxid mtime节点最近一次更新的时间 cversion子节点数据更新次数 dataVersion本节点数据更新次数 aclVersion节点ACL(授权信息)的更新次数 ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0 dataLength节点数据长度,本例中为hello world的长度 numChildren子节点个数 ls命令
获取路径下的节点信息,注意此路径为绝对路径,类似于linux的ls命令。 如ls /zookeeper set命令
设置节点的数据。 如set /zookeeper "hello world" rmr命令
删除节点命令,此命令与delete命令不同的是delete不可删除有子节点的节点,但是rmr命令可以删除,注意路径为绝对路径。 如rmr /zookeeper/znode delquota命令
删除配额,-n为子节点个数,-b为节点数据长度。 如delquota –n 2,请参见listquota和setquota命令。 quit命令
退出。 printwatches命令
设置和显示监视状态,on或者off。 如printwatches on create命令
创建节点,其中-s为顺序充点,-e临时节点。 如create /zookeeper/node1"test_create" world:anyone:cdrwa 其中acl处,请参见getAcl和setAcl命令。 stat命令
查看节点状态信息。如stat / cZxid = 0x0 ctime = Thu Jan 01 08:00:00 CST 1970 mZxid = 0x1f mtime = Thu Apr 27 16:05:14 CST 2017 pZxid = 0xc cversion = 1 dataVersion = 3 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 1 与get命令大体相同,请参见get命令。 close命令
断开客户端与服务端的连接。 ls2命令
ls2为ls命令的扩展,比ls命令多输出本节点信息。 如 ls /zookeeper history命令
列出最近的历史命令。 如history 0 - ls / 1 - ls / 2 - ls2 / 3 - history 4 - listquota /zookeeper 5 – history 基本格式为:命令ID-命令,可以与redo命令配合使用。 listquota命令
显示配额。 如listquota /zookeeper absolute path is/zookeeper/quota/zookeeper/zookeeper_limits Output quota for /zookeepercount=2,bytes=-1 解释: /zookeeper节点个数限额为2,长度无限额。 setAcl命令
设置节点Acl。 此处重点说一下acl,acl由大部分组成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions。 其中scheme和id是相关的,下面将scheme和id一起说明。 scheme和id
world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的 auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication) digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段 super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa) permissions
CREATE(c): 创建权限,可以在在当前node下创建child node DELETE(d): 删除权限,可以删除当前的node READ(r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes WRITE(w): 写权限,可以向当前node写数据 ADMIN(a): 管理权限,可以设置当前node的permission 综上,一个简单使用setAcl命令,则可以为: setAcl /zookeeper/node1 world:anyone:cdrw getAcl命令
获取节点Acl。 如getAcl /zookeeper/node1 'world,'anyone : cdrwa 注:可参见setAcl命令。 sync命令
强制同步。 如sync /zookeeper 由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。 redo命令
再次执行某命令。 如redo 10 其中10为命令ID,需与history配合使用。 addauth命令
节点认证。 如addauth digest username:password,可参见setAcl命令digest处。 使用方法: 一、通过setAcl设置用户名和密码 setAcl pathdigest:username:base64(sha1(password)):crwda 二、认证 addauth digest username:password delete命令
删除节点。 如delete /zknode1 setquota命令
设置子节点个数和数据长度配额。 如setquota –n 4 /zookeeper/node 设置/zookeeper/node子节点个数最大为4 setquota –b 100 /zookeeper/node 设置/zookeeper/node节点长度最大为100

windows下 java使用zookeeper案例的更多相关文章

  1. Windows 下java环境变量的配置(Windows7 ,8,8.1,10)

    Windows 下java环境变量的配置 在“系统”面板的左上角选择“高级系统设置”,在弹出的系统属性中选择”高级“项,然后点击右下角的“环境变量(N)...”,就此进入JAVA环境变量的配置. 如果 ...

  2. bat脚本:windows下一键启动zookeeper+kafka

    bat脚本:windows下一键启动zookeeper+kafka 把下面两行代码存为bat文件,双击执行即可.注意更改相应的目录 这里用ping来控制时间(先zookeeper,ping 4 次后 ...

  3. Windows下Java调用BAT批处理不弹出cmd窗口

    常规Windows下Java调用BAT方式肯定会弹出cmd窗口 Runtime.getRuntime().exec("cmd.exe /C start D:\\test.bat") ...

  4. windows下dubbo-admin和zookeeper安装部署

    1.   概述 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂 ...

  5. (转)windows 下 Java 及 Python 环境变量设置

    转自:http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html http://www.cnblogs.com/qiyes ...

  6. Windows下Java环境配置,tomcat安装

    问题描述:在Windows下面做Java web相关的项目的时候,Java和tomcat是基础,这里记载一下Java环境的配置以及tomcat的安装和配置. 使用工具:Windows.jdk安装包.t ...

  7. 搭建Windows下Java Web开发环境

      概要 1.SSH开发相关软件及开发包下载2.软件安装及相关设置3.最简单的Web程序 1.软件下载 在D盘建一个目录JavaTools,用来存放下载的软件和开发包.(本教程将使用D盘,你也可以使用 ...

  8. windows下安装apache zookeeper

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  9. windows下Java调用mysql的客户端备份和恢复

    这种东西没啥好聊的,其实就是Java执行dos界面下的命令,不过有些要注意就是了,真实dos下面的命令和java调用的windows系统的接口其实还是有一点不同. /** * @param hostI ...

随机推荐

  1. spring boot JPA 数据库连接池释放

    当JPA获取数据库数据连接时,如果连接数超过最大连接数的配置,系统就会报错: Unable to acquire JDBC Connection 和: Caused by: java.sql.SQLT ...

  2. [转载]十六进制数的两种不同表示:0x和H

    来源:https://blog.csdn.net/u013773644/article/details/519811860x是16进制的前缀,H是16进制的后缀 都是表示十六进制数,意义上没有什么区别 ...

  3. 干货分享!Oracle 的入门到精通 ~

    Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上 ...

  4. Vue项目里添加特殊字体或 某些字体乱码的问题

    问题:有个西藏的项目因使用藏文,而出现乱码 (一开始不乱的,不知道后台怎么处理...后来不知道为啥,前端乱码了) 解决:字体ttf 格式已下载,在项目中全局引入了 @font-face { font- ...

  5. 百度的echarts报表数据直接显示

    最近在使用百度的echarts开发,在使用过程中,遇到点需求,就是希望显示的数据直接在图标上显示,而不是鼠标滑动以后才显示,于是百度搜了下相关的文章正好找到了,然后使用了这个方法是可以用的,所以这里记 ...

  6. 使用OpenSSL生成RSA秘钥对并对文件加解密

    生成RSA私钥 openssl genrsa -out rsa.key 1024 生成RSA公钥 openssl rsa -in rsa.key -pubout -out pub.key 创建明文文件 ...

  7. orcle_day01

    Oracle: 数据库,1,认识数据库 数据库:数据的仓库,保存大量数据的地方,有利于对数据的维护.增删改查很方便. 数据库分类: 层次型数据库:现实世界中很多事物是按层次组织起来的.层次数据模型的提 ...

  8. 第十篇.5、python并发编程之协程

    一 引子 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去 ...

  9. Mac下安装svn服务器

    本文转载自http://www.cnblogs.com/czq1989/p/4913692.html Mac默认已经安装了svn,我们只需要进行配置并开启就可以了 首先我们可以验证一下是否安装了svn ...

  10. Mac OSX编译安装php5.6

    安装好OSX 10.13以后默认自带的php7.1.7,跟现有环境不兼容,所以准备编译安装php5.6,自带的php7不建议卸载,重新安装一份php5.6 1.安装php的一些依赖,推荐使用brew安 ...