zoukankan      html  css  js  c++  java
  • 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"));
        }
    }
  • 相关阅读:
    【小米OJ-找多少个等差数列】动态规划
    【小米OJ-找出可能的合的组合】深搜(dfs)
    【小米OJ-移除k位得到最小值】栈的应用
    【小米OJ-小米兔的轨迹】顺时针蛇形矩形
    Qt常用类
    file_operations
    Proc文件系统
    memset
    Source Insight快捷键大全
    内核内存分配
  • 原文地址:https://www.cnblogs.com/Eleven-Liu/p/11086964.html
Copyright © 2011-2022 走看看