依赖:

        <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. 在Windows下安装BIND作为DNS服务器(模拟网站比较有用)

    本文参考了CU下的一篇帖子,感谢:) 1.下载BIND http://ftp.isc.org/isc/bind9/9.4.3/BIND9.4.3.zip 2.安装    下载回来是zip的压缩包,解压 ...

  2. 02 Linux常用基本命令(二)

    1.Linux的文件系统格式 1.以 / 为根目录,成树状结构分布 2.查看根目录下有什么 ls / 3./下有超级用户root的家目录(root),还有普通用户的家目录(/home) 4.常用文件夹 ...

  3. 01 Redis基础

    NoSQL 学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是KV形式 nosql有很多产品,都有自己的api和语法,以及业务场景 产品种类: ...

  4. npm操作命令

    查看所有高级的npm moudles npm list --depth= 查看所有全局安装的模块 npm list --depth= -global 查找npm全局安装模块路径 npm config ...

  5. weex animation模块 使用指南

    本节学习目标 掌握内置组件animation的使用 我们在开发应用的时候,常常需要增加一些动画效果,来提高用户体验,经常用到的一些动画效果如下 平移 旋转 缩放 背景颜色改变 组件透明图 weex 提 ...

  6. 1.device-manage 优化

    一.当前简介 版本信息 device-manage:v1.0 mysql: 5.6.20 jdk : 1.8 Apache Maven 3.3.3 Spring4.2.5.RELEAS+SpingMV ...

  7. 关于spring读取配置文件的两种方式

    很多时候我们把需要随时调整的参数需要放在配置文件中单独进行读取,这就是软编码,相对于硬编码,软编码可以避免频繁修改类文件,频繁编译,必要时只需要用文本编辑器打开配置文件更改参数就行.但没有使用框架之前 ...

  8. c++ 类的继承和多态例子

    类的继承例子: 以上个动态银河系的制作为例,假设我们定义了一个星星的类如下: class Star { public: Star(){} ~Star(){} void Init(); void Mov ...

  9. openstack Rocky系列之keystone:(一)keystone的启动

    keystone在httpd的入口执行文件为/usr/bin/keystone-wsgi-public 查看文件/usr/bin/keystone-wsgi-public,根据代码,看到主要是这几行代 ...

  10. GitHub : Hello World

    这个写的太好啦,让我也没啥可以写的啦:http://www.open-open.com/lib/view/open1454507333214.html