Zookeeper入门看这篇就够了(3)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: Zookeeper入门看这篇就够了

完整APIDemo:

import lombok.extern.slf4j.Slf4j;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.CountDownLatch;
/** @Author mxn
  * @Description //TODO ZooKeeper Java API测试
  * @Date 10:22 2021/9/29
  * @Param
  * @return
 **/
@Slf4j
public class ZookeeperTest {
    // IP 和端口
    private final static String ipAddress = "192.168.2.123:2181";
    public static void main(String[] args) {
        ZookeeperTest test = new ZookeeperTest();
        String key = "/zkMxn";
        String value = "wo is muxiaonong";
        //创建Znode
        test.add(key,value);
//        获取节点数据
//        test.get(key);
        //修改节点数据
//        test.modify(key,"wo is zhuzhuxia");
        //删除节点
//        test.delete(key);
    }
    /**
     * @return
     * @Author mxn
     * @Description //TODO 获取ZooKeeper连接
     * @Date 10:22 2021/9/29
     * @Param
     **/
    public static ZooKeeper getConntection() {
        ZooKeeper zooKeeper = null;
        try {
            final CountDownLatch countDownLatch = new CountDownLatch(1);
            //watch机制(回调),监听是否连接成功
            zooKeeper = new ZooKeeper(ipAddress, 5000, new Watcher() {
                @Override
                public void process(WatchedEvent watchedEvent) {
                    if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
                        //如果受收到了服务端的响应事件,连接成功
                        countDownLatch.countDown();
                    }
                }
            });
            countDownLatch.await();
            log.info("zookeeper状态:{}",zooKeeper.getState());//CONNECTED
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return zooKeeper;
    }
   /** @Author lyy
     * @Description //TODO 关闭ZooKeeper连接
     * @Date 14:57 2021/9/29
     * @Param 
     * @return 
    **/
    public static void closeConnection(ZooKeeper zooKeeper) {
        try {
//            zooKeeper.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /** @Author lyy
      * @Description //TODO 添加节点
      * @Date 13:36 2021/9/29
      * @Param 
      * @return 
     **/
    public void add(String key ,String value) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        try {
            //参数类型
            //1.key
            //2.value
            //3.对应的ACL,当前节点的权限控制
            //4.设置当前节点类型
            zooKeeper.create(key, value.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
   /** @Author lyy
     * @Description //TODO 获取节点信息
     * @Date 14:57 2021/9/29
     * @Param 
     * @return 
    **/
    public void get(String key) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        Stat stat = new Stat();
        String data = null;
        try {
            byte[] bytes = zooKeeper.getData(key, null, stat);
            data = new String(bytes, "gbk");
            log.info("当前节点信息:{}",data);
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    /** @Author lyy
      * @Description //TODO 修改节点信息
      * @Date 14:57 2021/9/29
      * @Param 
      * @return 
     **/
    public void modify(String key,String newValue) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        Stat stat = new Stat();
        //version乐观锁概念,此处需要获取version信息,则需要先get拿到节点信息
        try {
            //获取节点(修改需要version信息)
            zooKeeper.getData(key, null, stat);
            //再修改
            zooKeeper.setData(key, newValue.getBytes(), stat.getVersion());
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
   /** @Author lyy
     * @Description //TODO 删除节点
     * @Date 14:57 2021/9/29
     * @Param 
     * @return 
    **/
    public void delete(String key) {
        ZooKeeper zooKeeper = ZookeeperTest.getConntection();
        Stat stat = new Stat();
        try {
            //获取节点(删除需要version信息)
            zooKeeper.getData(key, null, stat);
            //删除节点
            zooKeeper.delete(key, stat.getVersion());
            ZookeeperTest.closeConnection(zooKeeper);
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

总结


到这里我们对Zookeeper 大概有个入门级的了解了,不过Zookeeper远远比我们这里讲述的功能多,如何用Zookeeper实现集群管理、分布式锁,队列等等,小农会在后面的文章中进行讲解,关注我,后续精彩内容第一时间推送。


我是牧小农,怕什么真理无穷,进一步有进一步的欢喜,大家加油!!!

————————————————

版权声明:本文为CSDN博主「牧小农」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_14996421/article/details/120543298

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
7月前
|
存储 消息中间件 负载均衡
Zookeeper基础入门与安装部署
Zookeeper基础入门与安装部署
94 0
|
7月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
194 2
|
7月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
186 0
|
Dubbo Java 应用服务中间件
springboot + dubbo + zookeeper入门到实战超级详解
springboot + dubbo + zookeeper入门到实战超级详解
231 0
|
7月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
352 0
|
7月前
|
Dubbo Java 应用服务中间件
分布式应用简单入门及SpringBoot整合Dubbo+Zookeeper
分布式应用简单入门及SpringBoot整合Dubbo+Zookeeper
188 1
|
7月前
|
存储 Shell Linux
ZooKeeper【部署 01】单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置+shell自动部署脚本(一篇入门zookeeper)
ZooKeeper【部署 01】单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置+shell自动部署脚本(一篇入门zookeeper)
668 0
|
存储
zookeeper入门(二)
接触zookeeper也有一段时间了,一直有一个问题困扰着我,那就是zookeeper在codis中扮演什么角色,zookeeper中到底存储了哪些数据。
62 0
|
存储 消息中间件 设计模式
zookeeper入门(一)
Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目
129 0
zookeeper入门到精通08——服务器节点动态上下线案例实战
zookeeper入门到精通08——服务器节点动态上下线案例实战