当前位置 博文首页 > RemainderTime:window上安装zookeeper和可视化界面zkui

    RemainderTime:window上安装zookeeper和可视化界面zkui

    作者:[db:作者] 时间:2021-07-12 21:46

    一 序

    在window上使用zookeeper实现简单的分布式锁,并配合使用可视化界面zkui

    二 安装zookeeper

    下载安装zookeeper

    • 上官网下载最新zookeeper 官网下载.
    • 如果官网下载太慢,可使用我的zookeeper3.5.4版本

    链接:https://pan.baidu.com/s/1PxdloBT1GJvHIFHh9mCtWQ
    提取码:oq9l

    踩坑

    如果去官网下载的小伙伴一定要注意了,现在的版本的已经把编译和未编译的版本分开成了两个项目。应该是从3.5.4后的版本开始。
    所以大家下载的时候一定要下载尾缀有 -bin 的文件。


    点击第一个链接,里面是编译好的项目。
    在这里插入图片描述
    选择任意一个项目后缀带 -bin 的连接进行下载就行了。

    本地配置zookeeper

    现在我把下载好的zookeeper解压并放在了D盘下,

    • 外层zookeeper文件夹是自己新创建的
    • zookeeper-3.5.4-beta文件夹则是解压出来的
    • 并在zookeeper文件夹下创建两个文件夹 datalog
      在这里插入图片描述
    • 进入zookeeper包中的conf文件夹中
      在这里插入图片描述
    • 找到尾缀为 .cfg 文件,复制一份在当前目录下并修改名称为 zoo.cfg,或者直接在原文件上修改。
      在这里插入图片描述
      这里我直接修改为zoo.cfg
    • 记事本打开修改好的zoo.cfg
    • 新增两行并保存

    dataDir=D:\zookeeper\data
    dataLogDir=D:\zookeeper\log

    dataDir为刚才自己新建的data路径
    dataLogDir为新建的log路径
    在这里插入图片描述

    本地启动zookeeper

    • 首先进入zookeeper的bin文件下
      在这里插入图片描述
    • 首先命令行启动服务 zkserver.cmd,或者双击zkserver.cmd
      在这里插入图片描述
    • 过后命令行启动 zkCli.cmd,或者双击zkCli.cmd(显示如下界面就是启动成功了)
      在这里插入图片描述

    三 安装可视化界面 zkui

    下载zkui

    • github下载
    • 第二种就是自己提前下载好的

    链接:https://pan.baidu.com/s/1F3PqyrZB46l0z_GWYDV10g
    提取码:a2wv

    配置安装zkui

    • 把下载好的zkui解压并放在d盘下
      在这里插入图片描述
      注:因为zkui没有提供编译好的包,所以需要我们自己编译并打包运行

    方式一: 可使用命令行打包(前提是本地需要先配置maven)

    • 首先编译项目命令
    mvn clean compile 
    
    • 然后打包项目
    mvn clean package
    

    方式二:使用idea进行打包(本教程使用的)

    • 使用idea打开zkui项目
    • 首先双击 clean,成功后,再次双击package进行打包
      在这里插入图片描述
    • 上述操作完成后,会新生产一个terget文件,在文件中会有刚刚生成的jar包
      在这里插入图片描述
      在这里插入图片描述
    • 然后在zkui文件里找到 config.cfg 并打开
    • 配置自己的zookeeper地址
      在这里插入图片描述
    • 修改完后,需要把 config.cfg文件复制一份放在和 刚刚打好的 jar包同一级的目录文件下(很重要)
      在这里插入图片描述

    启动zkui

    • 直接在当前文件夹下 cmd命名行运行
      在这里插入图片描述
    • 弹出命令框,进行jar运行,输入并回车
    java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar
    

    在这里插入图片描述

    这样就是运行成功了

    • 本地访问 localhost:9090
      在这里插入图片描述
    • 输入默认账号: admin 密码 : manger
      在这里插入图片描述
      着就算完成了,启动zookeeper一起使用。

    四 实现简单的分布式锁

    • 使用idea创建一个maven项目
    • 引入依赖
    		<dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>5.1.0</version>
            </dependency>
    
    • 代码实现
    public class ZookeeperLockTest {
            public static void main(String[] args)  {
                CuratorFramework zkClient = getZkClient();
                String lockPath = "/lock";
                InterProcessMutex lock = new InterProcessMutex(zkClient, lockPath);
                //模拟50个线程抢锁
                for (int i = 0; i < 50; i++) {
                    new Thread(new TestThread(i, lock)).start();
                }
            }
    
    
            static class TestThread implements Runnable {
                private Integer threadFlag;
                private InterProcessMutex lock;
    
                public TestThread(Integer threadFlag, InterProcessMutex lock) {
                    this.threadFlag = threadFlag;
                    this.lock = lock;
                }
    
                public void run() {
                    try {
                        lock.acquire();
                        System.out.println("第"+threadFlag+"线程获取到了锁");
                        //等到1秒后释放锁
                        Thread.sleep(500);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }finally {
                        try {
                            lock.release();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
    
            private static CuratorFramework getZkClient() {
                String zkServerAddress = "localhost:2181";
                ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3, 5000);
                CuratorFramework zkClient = CuratorFrameworkFactory.builder()
                        .connectString(zkServerAddress)
                        .sessionTimeoutMs(5000)
                        .connectionTimeoutMs(5000)
                        .retryPolicy(retryPolicy)
                        .build();
                zkClient.start();
                return zkClient;
            }
    
    }
    
    • 运行main方法,控制台打印
      在这里插入图片描述
      在 线程抢锁期间,刷新页面查看 zkui 界面下的 lock文件夹下面的数据
      在这里插入图片描述
      当项目运行完成后,相应的lock文件也会被释放销毁,刷新页面如下
      在这里插入图片描述
      详细简单分布式锁的解析可查看地址 :传送
    cs