Springboot整合zookeeper

导入依赖
<dependencies>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.14</version>
    </dependency>


    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>2.13.0</version>
        <exclusions>
            <exclusion>
                <artifactId>zookeeper</artifactId>
                <groupId>org.apache.zookeeper</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
    </dependency>

</dependencies>
复杂方法
package com.zookeeper.simple;

import lombok.SneakyThrows;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class BaseTest {
    private static CountDownLatch countDownLatch = new CountDownLatch(1);
    static ZooKeeper zooKeeper = null;
    private static final String ADDRESS = "10.0.138.224:2181";

    public static void main(String[] args) throws Exception {
        zooKeeper = new ZooKeeper(ADDRESS, 10000, new Watcher() {
            @SneakyThrows
            @Override
            public void process(WatchedEvent event) {
                Event.EventType type = event.getType();
                Event.KeeperState state = event.getState();
                System.out.println(type);
                System.out.println(state);

                if (type == Event.EventType.None && state == Event.KeeperState.SyncConnected) {
                    System.out.println("连接上了");
                } else if (type == Event.EventType.NodeCreated && state == Event.KeeperState.SyncConnected) {
                    System.err.println("子节点数量发生变化" + event.getPath());
                    try {
                        List<String> children = zooKeeper.getChildren("/hzx2005", true);
                        System.err.println(children);
                    } catch (KeeperException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                countDownLatch.countDown();//放行

            }
        });

        countDownLatch.await();
        System.out.println("开始执行");

        // 创建节点
        zooKeeper.exists("/hzx2005",true);
        zooKeeper.create("/hzx2005","学不会啊,面试题太难背了".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

        // 获取数据
        byte[] data = zooKeeper.getData("/hzx2005", true, null);
        System.out.println(new String(data));

        // 修改数据 最后的版本号的目的是乐观锁,如果忽略乐观锁写-1,否则必须匹配当前数据的版本号
        Stat stat = zooKeeper.setData("/hzx2005", "来得及唱歌".getBytes(), -1);
        System.out.println(stat);

        // 删除
        zooKeeper.delete("/hzx2005",-1);

//        // 创建子节点
//        List<String> children = zooKeeper.getChildren("/hzx2005", true);
//        System.out.println(children);
//        zooKeeper.create("/hzx2005/day20200917", "饭卡里你发来看".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
//
//        for (String child : children) {
//            byte[] data = zooKeeper.getData("/sh2005/" + child, true, null);
//            System.err.println(new String(data));
//        }
//        //不允许在父节点不存在的情况下创建子节点
//        zooKeeper.create("/dasdasd/dasdasdas/dasdasd", "大叔大婶大所多".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);


        System.in.read();
    }
}

简单方法
package com.zookeeper.curator;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;

public class CuratorTest {
    private static final String ADDRESS = "10.0.138.224:2181";

    public static void main(String[] args) throws Exception {
       CuratorFramework curatorFramework =  CuratorFrameworkFactory.builder().connectString(ADDRESS)
               .sessionTimeoutMs(10000).retryPolicy(new ExponentialBackoffRetry(1000,5)).build();
       curatorFramework.start();

//       curatorFramework.create().forPath("/hzx2055","开你车咔嚓".getBytes());

//       curatorFramework.create().withMode(CreateMode.EPHEMERAL).forPath("/hzx2055_2","白金卡杯咖啡".getBytes());

        //可以选择当父节点不存在的时候一起创建父节点
        curatorFramework.create().creatingParentContainersIfNeeded().forPath("/hzx2055/curator1/curator2","女粉是坑你".getBytes());

        System.in.read();

    }
}
虚拟机中查看

进入容器 [root@localhost zookeeper]# docker-compose up -d

启动容器 docker exec -it zk bash

启动bin下的zkCli.sh
root@b2da928f0e4d:/zookeeper-3.4.14/bin# ./zkCli.sh

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值