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"));
        }
    }
  • 相关阅读:
    react 中文文档案例三 (开关按钮)
    react 中文文档案例二 (头像时间)
    react 中文文档案例一 (倒计时)
    韩昊 20190905-2 博客作业
    韩昊 20190905-3 命令行和控制台编程
    bug的状态
    冒泡排序
    python简单实现自动化
    如何写好测试用例——慕课网
    快速搭建springboot项目
  • 原文地址:https://www.cnblogs.com/Eleven-Liu/p/11086964.html
Copyright © 2011-2022 走看看