java连接zookeeper集群的简单api操作

zookeeper简单介绍即客户端命令行的使用

https://blog.csdn.net/kxj19980524/article/details/89364370

使用java之前先看看命令行的使用

导包,解压zookeeper的安装包,找到下面几个包,导入java项目

然后下载junit和它的依赖包,导入到项目中去

这就是一个简单的创建zookeeper客户端类

package com.buba.zookeeper;

import org.apache.zookeeper.*;
import org.junit.Before;
import org.junit.Test;

public class ZKClinet {

    //连接的zk的地址及端口号配置
    private String connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";

    //会话超时时间,单位毫秒
    private int sessionTimeout = 2000;

    private ZooKeeper zooKeeper = null;

    //1.创建客户端
    @Test
    public void initZK() throws Exception{
        zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() {//Watcher就是监听节点

            @Override
            public void process(WatchedEvent event) {
                //监听发生后触发的事
                System.out.println(event.getType() + "--" + event.getPath());

            }
        });
    }

}

创建一个子节点 

package com.buba.zookeeper;

import org.apache.zookeeper.*;
import org.junit.Before;
import org.junit.Test;

public class ZKClinet {

    //连接的zk的地址及端口号配置
    private String connectString = "hadoop102:2181,hadoop103:2181,hadoop104:2181";

    //会话超时时间,单位毫秒
    private int sessionTimeout = 2000;

    private ZooKeeper zooKeeper = null;

    //1.创建客户端
    //@Test
    @Before
    public void initZK() throws Exception{
        zooKeeper = new ZooKeeper(connectString, sessionTimeout, new Watcher() {//Watcher就是监听节点

            @Override
            public void process(WatchedEvent event) {
                //监听发生后触发的事
                System.out.println(event.getType() + "--" + event.getPath());

            }
        });
    }

    //2.创建子节点
    @Test
    public void createNode() throws Exception{
        //参数1:创建节点的路径;
        //参数2:创建节点存储的数据;
        //3.创建节点后节点具有的权限
        //4.节点类型  持久的还是短暂的
        String create = zooKeeper.create("/kxj","kxj".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

        System.out.println(create);

    }

}

在集群查看就显示创建成功了

获取某一路径下节点数

    //3.获取某一路径下节点数
    @Test
    public void getChild()throws Exception{
        //第二个参数是要不要监听
        List<String> children = zooKeeper.getChildren("/", false);

        for(String child : children){
            System.out.println(child);
        }
    }

判断某一节点是否存在,第二个参数true是对这个节点进行监听,当对这个节点进行操作的时候就走了上面监听的方法了.当第二次对这个节点操作的时候就监听没反应了,因为监听只能一次.

 //4.判断某一节点是否存在
    @Test
    public void isExists() throws Exception{
        Stat exists = zooKeeper.exists("/kxj", true);

        System.out.println(exists==null?"不存在":"存在");

        System.in.read();
    }

 

那要想让它一直监听怎么办呢?把它放到监听事件处理方法中,每次监听完再让它监听一次.

这样就实现了一直监听的操作了

监听器原理

创建zookeeper客户端和,它会开启两个线程,一个是连接zookeeper集群的,一个是监听器,当java客户端向zookeeper集群发送一条监听指令后,zookeeper集群就会注册这个监听器,当相对应的路径发生改变时,就会通过监听器那个线程向java客户端发送消息,然后执行process代码.

猜你喜欢

转载自blog.csdn.net/kxj19980524/article/details/89385619