(原) 2.2 ZkClient使用

本文为原创文章,转载请注明出处,谢谢

ZkClient使用

1、jar包引入,演示版本为0.8,非maven项目,可以下载jar包导入到项目中

<dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.8</version>
</dependency>

2、创建Zookeeper连接

 示例:ZkClient zc = new ZkClient("192.168.117.128:2181",10000,10000,new SerializableSerializer());

 API:ZkClient(java.lang.String zkServers, int sessionTimeout, int connectionTimeout, org.I0Itec.zkclient.serialize.ZkSerializer zkSerializer)

  • zkServers:Zookeeper服务器地址
  • sessionTimeout:session超时时间
  • connectionTimeout:连接超时时间
  • zkSerializer:序列化器,ZkClient提供2种
    • SerializableSerializer:对象序列化,可转换对象
    • BytesPushThroughSerializer:字节数组序列化

3、创建节点

示例:

 @Test
    public void createNode() {
        createSession();
        User user = new User();
        user.setId(1l);
        user.setName("scot");
        String path = zc.create("/zkClient_01/02",user, CreateMode.PERSISTENT);
        System.out.println("path :" + path);
    }

API:

public java.lang.String create(java.lang.String path, java.lang.Object data, org.apache.zookeeper.CreateMode mode) public java.lang.String create(java.lang.String path, java.lang.Object data, java.util.List<org.apache.zookeeper.data.ACL> acl, org.apache.zookeeper.CreateMode mode) 

示例用的为第一种,没有设置访问权限列表(List<org.apache.zookeeper.data.ACL> acl)

4、节点是否存在

  boolean exists(java.lang.String path);

5、获取节点信息

示例:

 @Test
    public void getNode() {
        createSession();
        User user = zc.readData("/zkClient_01");
        System.out.println(user.getName());

        Stat stat = new Stat();
        User user1 = zc.readData("/zkClient_01",stat);
        System.out.println(user.getName());
        System.out.println(stat);
    }

API:

   public <T> T readData(java.lang.String path)public <T> T readData(java.lang.String path, boolean returnNullIfPathNotExists)public <T> T readData(java.lang.String path, org.apache.zookeeper.data.Stat stat)
  • path:节点路径。
  • returnnullIfPathNotExists:同字面意思,节点不存在返回null
  • stat:节点详细信息。传递stat对象到readData方法,方法内部会填充stat数据

6、获取子节点

示例:

@Test
    public void getChild() {
        createSession();
        String path = "/node_scot";
        boolean b = this.exists(path);
        if(b) {
            List<String> children =zc.getChildren(path);
            System.out.println(children.size());
        }else {
            System.out.println("do not have this node");
        }
    }

API:

   public java.util.List<java.lang.String> getChildren(java.lang.String path) 

7、删除节点

示例:

 @Test
    public void del() {
        createSession();
        String path = "/zkClient_01/01";
        if(this.exists(path)) {
            //zc.delete(path);//删除当前节点,有子节点无法删除
            zc.deleteRecursive(path);//删除非子节点
        }
    }

API:

public boolean delete(java.lang.String path)

public boolean delete(java.lang.String path, int version) 

public boolean deleteRecursive(java.lang.String path) 
  • version:节点的版本。如果版本不符无法删除

8、更新节点信息

示例:

@Test
    public void writeNode() {
        createSession();
        User user = new User();
        user.setId(11l);
        user.setName("sksujer002");
        zc.writeData("/zkClient_01",user);
    }

9、监控子节点改变(当前节点不存在也可以设置监控)

示例:

    @Test
    public void subscribeChildChange() throws InterruptedException {
        createSession();
        zc.subscribeChildChanges("/zkClient_01",new MyZkChildListener());
        Thread.sleep(Integer.MAX_VALUE);
    }

    static class MyZkChildListener implements IZkChildListener {

        @Override
        public void handleChildChange(String s, List<String> strings) throws Exception {
            System.out.println("s:"+s);
            System.out.println("Strings:" + strings);
        }
    }

API:

public java.util.List<java.lang.String> subscribeChildChanges(java.lang.String path, org.I0Itec.zkclient.IZkChildListener listener)

public interface IZkChildListener {
  void handleChildChange(java.lang.String parentPath, java.util.List<java.lang.String> currentChilds) throws java.lang.Exception;
}
  • subscribeChildChanges:注册子节点改变监控
    • path:路径
    • IZkChildListener listener:子节点监控接口
  • IZkChildListener - handChildChange:子节点列表发生改变触发此方法
    • parentPath:监控节点路径
    • currentChilds:子节点列表

10、监控节点数据

示例:

 @Test
    public void subscribeDataChange () throws InterruptedException {
        createSession();
        zc.subscribeDataChanges("/zkClient_01",new MyZkDataListener());
        Thread.sleep(Integer.MAX_VALUE);
    }

    static class MyZkDataListener implements IZkDataListener {

        @Override
        public void handleDataChange(String s, Object o) throws Exception {
            System.out.println("节点信息改变");
            System.out.println("s:"+s);
            System.out.println("o:"+o);
        }

        @Override
        public void handleDataDeleted(String s) throws Exception {
            System.out.println("节点被删除:"+s);
        }
    }

API:

 public void subscribeDataChanges(java.lang.String path, org.I0Itec.zkclient.IZkDataListener listener)

public interface IZkDataListener {
void handleDataChange(java.lang.String dataPath, java.lang.Object object) throws java.lang.Exception;

void handleDataDeleted(java.lang.String dataPath) throws java.lang.Exception;
}
  • subscribeDataChanges:注册节点数据监控
    • IZkDataListener listener:数据改变监控接口
  • IZkDataListener - handleDataChange:节点数据改变触发此方法
    • dataPath:监控节点路径
    • object:节点的新数据
  • IZkDataListener - handleDataDeleted:节点被删除触发此方法
    • dataPath:监控节点路径
时间: 2025-01-02 04:32:32

(原) 2.2 ZkClient使用的相关文章

Zookeeper 客户端 之【ZkClient】

[ZkClient]  ZkClient 是 GitHub 上一个开源的客户端,如果我们用 Maven 来管理工程,则引用如下. <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</version> </dependency> <dependency

原码、反码、补码

原码.反码.补码,计算机中负数的表示 1.表示范围 拿单字节整数来说,无符号型,其表示范围是[0,255],总共表示了256个数据.有符号型,其表示范围是[-128,127]. 先看无符号,0表示为0000 0000,255表示为1111 1111,刚好满足了要求,可以表示256个数据. 再看有符号的,若是用原码表示,0表示为0000 000.因为咱们有符号,所以应该也有个负0(虽然它还是0):1000 0000. 那我们看看这样还能够满足我们的要求,表示256个数据么? 正数,没问题,127是

智原GM推出GM8126升级产品GM8138

Rescue Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is:

sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)

n a^o7 ! Time Limit: 1000MS Memory limit: 65536K 题目描述 All brave and intelligent fighters, next you will step into a distinctive battleground which is full of sweet and happiness. If you want to win the battle, you must do warm-up according to my inst

[js高手之路]原型式继承与寄生式继承

一.原型式继承本质其实就是个浅拷贝,以一个对象为模板复制出新的对象 1 function object( o ){ 2 var G = function(){}; 3 G.prototype = o; 4 return new G(); 5 } 6 var obj = { 7 name : 'ghostwu', 8 age : 22, 9 show : function(){ 10 return this.name + ',' + this.age; 11 } 12 }; 13 var obj2

计算机基础知识_原码反码补码

一.原码,反码,补码 1.原码 比如一个二进制数字 最高位是0,(0代表正数) 0010 1000 那么原码就是0010 1000 反码: 0010 1000 补码: 0010 1000 都是一样的,这个二进制数字的10进制是40 所以是正数 正数的原反补都是一样的 2.反码 反码就是原码的取反,二进制的 0变为1 1变为0 ,看最高符号位是0 还是1,如果是1,则你要0变为1,1变为0, 3.补码: 负数的的是原码 取反 在加1 变成补码(二进制数) 正数的原码 加上负数的补码就等于是做减法运

原码 反码 补码

出处来自:http://blog.csdn.net/liushuijinger/article/details/7429197 原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1.剩下的n-1位表示概数的绝对值. 例如: X=+101011 , [X]原= 00101011    X=-101011 , [X]原= 10101011 位数不够的用0补全. PS:正数的原.反.补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0.

[原抄] Potplayer 1.7.2710 快捷键

对着软件一个一个抄下来的. 打开文件:Ctrl+O[F3] / 简索文件:F12 / 最后文件 Ctrl+Y / 关闭:F4 打开摄像头:Ctrl+J / 打开DVD设备 Ctrl+D 播放.暂停:空格 / 关闭:F4 / 时间定位:G / 章节.书签:H音量控制: 静音:M  /  音量+ ↑  /  音量- ↓播放速度: Z原速  /  X减速  /  C加速 画面大小:全屏:ENTER(回车)  /  1原一半  /  2原大小  /  3原1.5倍  /  4原2倍  /  5最大化画面

java基础:原码反码补码

计算机在操作的时候,都是采用数据对应二进制的补码来计算的: 原码 反码 补码 原码:用原码,反码,补码来分别表示+7,和-7. 首先得到7的二进制:111