Spring Boot 知识笔记(集成zookeeper)

一、本机搭建zookeeper伪集群

1、下载安装包,复制三份

 

2、每个安装包目录下面新建一个data文件夹,用于存放数据目录

3、安装包的conf目录下,修改zoo.cfg配置文件

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
#这里要修改成刚才创建的目录
dataDir=D:/tools/zookeeper/zookeeper-3.4.6_1/data  
# the port at which the clients will connect
#每个安装包的启动端口要不一样
clientPort=2181  
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

#server后面的两个端口也必须不同
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:4888:5888
server.3=127.0.0.1:6888:7888

4、上面创建的data目录,新建myid文件,分别写入1,2,3,与配置文件中的server点后面的数字一致

5、进入bin目录,分别启动三个zk

6、在节点1,创建一个znode,并设置初始内容,如下

7、登录其他节点,查看这个znode的内容,如下,可以看到,不同节点的zk已经同步了znode的内容,这就是zk的核心特性,基于这个特性,可以对分布式应用程序实现服务不同、统一配置管理、统一服务命名,服务注册等功能。

二、使用java集成zk,实现znode的增删改查

package net.Eleven.demo.OtherTest;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class ZookeeperClient implements Watcher {
    private ZooKeeper zookeeper;
    private static final int SESSION_TIME_OUT=2000; //超时时间
    private CountDownLatch countDownLatch = new CountDownLatch(1);

    @Override
    public void process(WatchedEvent watchedEvent) {
        if (watchedEvent.getState()== Event.KeeperState.SyncConnected){
            System.out.println("Watch received event");
            countDownLatch.countDown();
        }
    }

    /**
     * 连接zk
     * @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.java connection success");
    }

    //创建节点
    public String  createNode(String path,String data) throws Exception{
        return this.zookeeper.create(path,data.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }

    //获取所有节点
    public List<String> getChildren(String path) throws KeeperException,InterruptedException{
        List<String> children = zookeeper.getChildren(path,false);
        return children;
    }

    //获取节点上的数据
    public String getData(String path) throws KeeperException,InterruptedException{
        byte[] data = zookeeper.getData(path,false,null);
        if (data==null){
            return "";
        }
        return new String(data);
    }

    //设置节点信息
    public Stat setData(String path,String data) throws KeeperException, InterruptedException{
        Stat stat = zookeeper.setData(path, data.getBytes(), -1);
        return stat;
    }

    //删除节点
    public void deleteNode(String path) throws InterruptedException, KeeperException{
        zookeeper.delete(path, -1);
    }


    //关闭连接
    public void closeConnection() throws InterruptedException {
        if (zookeeper != null) {
            zookeeper.close();
        }
    }

    public boolean isConnected(){
        return zookeeper.getState() == ZooKeeper.States.CONNECTED;
    }

    public static void main(String[] args) throws Exception {
        ZookeeperClient zookeeper = new ZookeeperClient();
        zookeeper.connectZookeeper("127.0.0.1:2181");
        List<String> children = zookeeper.getChildren("/");
        System.out.println(children);
        zookeeper.createNode("/Eleven4","create node by java");
        System.out.println(zookeeper.getData("/Eleven4"));
    }
}
原文地址:https://www.cnblogs.com/Eleven-Liu/p/11086964.html