依赖:

        <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. Codeforces 1201D. Treasure Hunting

    传送门 看一眼感觉就是 $dp$,但是似乎状态太多了 考虑推推性质 首先每到一行都要把所有宝藏都走到,那么一定会走到最左边的和最右边的宝藏 注意到一旦走完所有宝藏时肯定是在最左边或者最右边的宝藏位置 ...

  2. volatile关键字和transient关键字

    Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量 1.volatile 关键字-----针对变量的可变性 专业解释:volatile关键字是个类型修饰符用它声明的类型变 ...

  3. 一般处理程序,ajax

    一般处理程序调用session: 在.aspx.cs页中读写Session都是Session["***"]就可以获取或者写入.但是在一般处理程序也就是ashx页面中,再这样写的话, ...

  4. CPU如何区分溢出和自然进位?

    CPU如何区分溢出和自然进位? 之前学习补码的时候倒是学会了基本概念,但是最近又接触时发现还有不清楚的地方,所以又研究了下 今天的核心问题的"CPU是如何区分高位自然舍弃和溢出的?" ...

  5. 098、Swarm 如何实现 Failover (Swarm05)

    参考https://www.cnblogs.com/CloudMan6/p/7898245.html   故障是在所难免的,容器可能崩溃,Docker Host 可能宕机,不过幸运的是,Swarm 已 ...

  6. LintCode 53---翻转字符串中的单词

    public class Solution { /* * @param s: A string * @return: A string */ public static String reverseW ...

  7. C# 之 String.Empty

    .NET Framework 类库,表示空字符串,此字段为只读,命名空间:System.程序集:mscorlib(在 mscorlib.dll 中).   EG:protected string lo ...

  8. LLVM源码安装教程

    LLVM4.0源码安装教程 环境:ubuntu16.04 llvm-4.0 clang-4.0 步骤: 1.依赖库安装,注意llvm的编译对gcc版本和cmake版本有要求,请根据版本进行匹配 $ s ...

  9. 关于获取某月某日最后一天时Calendar的cal.getActualMaximum(Calendar.DAY_OF_MONTH)的吐槽

    例如: 在2017.03.29-31号 新建一个Calendar的単例 设置年:2017 设置月:2 int day = cal.getActualMaximum(Calendar.DAY_OF_MO ...

  10. magento获取当前栏目ID号与栏目名称函数

    Magento获取当前栏目ID:$_cat= new Mage_Catalog_Block_Navigation();$curent_cat= $_cat->getCurrentCategory ...