首页 > 其他分享 >zookeeper之curator API

zookeeper之curator API

时间:2023-11-15 09:56:18浏览次数:33  
标签:Exception String zookeeper curator curatorFramework throws API path public

参考:https://www.jianshu.com/p/075f3262938c

概述

Apache Curator是一个比较完善的,由Netflix公司开源的一套ZooKeeper的JAVA客户端框架组件。解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给Curator予高度评价。

基本API

  • pom
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.1.0</version>
        </dependency>
  • 初始化客户端
curatorFramework = CuratorFrameworkFactory.builder() // 使用工厂类来建造客户端的实例对象
                .connectString(ipPort) // 配置zk服务器IP port
                .sessionTimeoutMs(4000)// 设定会话时间
                .retryPolicy(new ExponentialBackoffRetry(1000, 3))// 设置及重连策略
                .namespace("curator")// 方便管理的命名空间,其实就是一级目录
                .build();// 建立管道
        curatorFramework.start();//启动
  • 创建节点
    public static String createZnode(String path, String value) throws Exception {
        return curatorFramework.create()// 创建Znode
                .creatingParentsIfNeeded()// 如果是多级结点,这里声明如果需要,自动创建父节点
                .withMode(CreateMode.PERSISTENT)// 声明结点类型
                .forPath(path, value.getBytes());// 声明结点路径和值
    }
  • 删除节点
public static boolean  checkExists(String path) throws Exception {
        Stat stat = curatorFramework.checkExists().forPath(path);
        return stat!=null;
    }
  • 节点是否存在
public static boolean  checkExists(String path) throws Exception {
        Stat stat = curatorFramework.checkExists().forPath(path);
        return stat!=null;
    }
  • 修改节点

    public static void updateZnode(String path, String value) throws Exception {
        Stat stat = curatorFramework.checkExists().forPath(path);
        if (stat == null) {
            System.out.println("Znode does not exists");
        } else {
            curatorFramework.setData().withVersion(stat.getVersion()).forPath(path, value.getBytes());
        }
    }

  • 查询节点

    public static String getZnodeData(String path) throws Exception {
        byte[] dataBytes = curatorFramework.getData().forPath(path);
        return new String(dataBytes);
    }
  • 查询子节点
    public static List<String> getnodeChildren(String path) throws Exception {
        List<String> dataList = curatorFramework.getChildren().forPath(path);
        return dataList;
    }

高级API

  • pom
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.1.0</version>
        </dependency>

CacheListener监听器

CacheListener用来监控ZNode的节点. 当节点进行增,删,改时,会触发响应事件。主要有:NodeCacheListener,PathChildrenCacheListener,TreeCacheListener三类监听器

  • NodeCacheListener:只是监听节点是否有变化,无法知道是什么事件
  • PathChildrenCacheListener:监听子节点的增删改事件
  • TreeCacheListener:监听增删改事件,包括自己跟子节点

拿PathChildrenCacheListener举例

        public static void addWatcherWithChildrenCache(String path) throws Exception {

        CuratorCache curatorCache = CuratorCache.builder(curatorFramework, path).build();
        // 缓存数据
        PathChildrenCacheListener pathChildrenCacheListener = new PathChildrenCacheListener() {
            @Override
            public void childEvent(CuratorFramework curatorFramework, PathChildrenCacheEvent pathChildrenCacheEvent)
                    throws Exception {
                System.out.println("事件路径:" + pathChildrenCacheEvent.getData().getPath() + "事件类型"
                        + pathChildrenCacheEvent.getType());
            }
        };
        CuratorCacheListener listener = CuratorCacheListener.builder()
                .forPathChildrenCache(path, curatorFramework, pathChildrenCacheListener).build();
        curatorCache.listenable().addListener(listener);
        curatorCache.start();
    }

分布式锁

Curator的分布式锁有四个核心类,分别是:InterProcessMutex、InterProcessSemaphoreMutex、InterProcessReadWriteLock、InterProcessMultiLock。其作用:

  • InterProcessMutex:分布式可重入排它锁
  • InterProcessSemaphoreMutex:分布式排它锁
  • InterProcessReadWriteLock:分布式读写锁
  • InterProcessMultiLock:将多个锁作为单个实体管理的容器

API操作

   public void acquire() throws Exception;//获取锁,获取不到锁一直阻塞,zk连接中断则抛异常
   public boolean acquire(long time, TimeUnit unit) throws Exception;//获取锁,超过该时间后,直接返回false,zk连接中断则抛异常
   public void release() throws Exception;//释放锁

分布式计数器

分布式计数器有三个核心类:DistributedAtomicInteger,DistributedAtomicLong。这个两个除了计数范围不同外,没有任何不同。操作也非常简单,跟AtomicInteger大同小异。

increment() //加1
decrement() //减1
compareAndSet(Integer expectedValue, Integer newValue) //cas操作
get() //获取当前值

标签:Exception,String,zookeeper,curator,curatorFramework,throws,API,path,public
From: https://www.cnblogs.com/hasome/p/17816831.html

相关文章

  • Linux socket API
    socket是进程通信机制的一种,与PIPE、FIFO不同的是,socket即可以在同一台主机通信(unixdomain),也可以通过网络在不同主机上的进程间通信(如:ipv4、ipv6),例如因特网,应用层通过调用socketAPI来与内核TCP/IP协议栈的通信,通过网络字节实现不用主机之间的数据传输。前置条件字节序对于多......
  • vue3源码学习api-vue-sfc文件编译
    vue最有代表性质的就是.VUE的文件,每一个vue文件都是一个组件,那么vue组件的编译过程是什么样的呢Vue单文件组件(SFC)和指令ast语法树一个Vue单文件组件(SFC),通常使用*.vue作为文件扩展名,它是一种使用了类似HTML语法的自定义文件格式,用于定义Vue组件。一个Vue单......
  • 【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header
    问题描述在APIMGateway日志中,对于发送到APIMHost的请求,只记录了一些常规的URL,Status,Time,IP等信息。关于请求Header,Body中的信息,因为隐私保护的原因,默认没有记录。[Info]2023-11-16T06:19:28.482[GatewayLogs],isRequestSuccess:True,totalTime:2196,category:......
  • P3643 [APIO2016] 划艇
    [APIO2016]划艇-洛谷题目详情-[Apio2016]赛艇-BZOJbyHydroOJ看着个题目以为是变换考虑方向,但想了半天完全没有思路先考虑暴力。设\(dp_{i,j}\)表示前\(i\)个数,第\(i\)个数强制选,值为\(j\)的方案数容易得到转移方程:\[dp_{i,j}=\begin{cases}\sum\li......
  • Kubernetes:kube-apiserver 之准入
    kubernetes:kube-apiserver系列文章:Kubernetes:kube-apiserver之scheme(一)Kubernetes:kube-apiserver之scheme(二)Kubernetes:kube-apiserver之启动流程(一)Kubernetes:kube-apiserver之启动流程(二)Kubernetes:kube-apiserver和etcd的交互Kubernetes:kube-api......
  • Linux下安装Zookeeper
    前言Zookeeper是java编写,所以需要先安装JDK环境:Linux安装JDK1.下载解压文件tarzxvfapache-zookeeper-3.6.3-bin.tar.gz2.在主目录下创建data和logs两个目录用于存储数据和日志:cd/opt/apache-zookeeper-3.6.3-binmkdirdatamkdirlogs3.在conf目录下新建zoo.cfg文件......
  • 一键获取域名的相关信息——域名反查Api接口的神奇功能
    在现代互联网时代中,域名是我们上网必备的工具,它承载着我们上网所需的所有信息。但是有时我们需要了解域名的相关信息,比如IP地址、注册人信息、域名到期时间等等。这时候,我们就需要用到域名反查API接口,来获取这些信息。一键获取域名的相关信息——域名反查API接口的神奇功能,可以帮......
  • HTML和webAPI之根据时间和事件来变实现图片的转换
    一:概述在一些前端的设计场景中,我们会发现有很多的场景需要根据时间然后去变换图片。在不同时间都会出现不同的图片。下面来写一个案例,来更换图片,并显示当前的时间(xx年xx月xx日)。二:案例实现在这里需要用到的知识是事件的使用以及JavaScript内置对象(时间函数)的使用。以及时间的......
  • .NET Web API 详解
    当涉及到.NETWebAPI时,这是Microsoft提供的一个框架,用于构建可以被各种客户端消费的HTTP服务,包括浏览器、移动设备和桌面应用程序。它是ASP.NET平台的一部分,旨在简化构建RESTfulWebAPI的过程。以下是.NETWebAPI的一些关键概念和特性:RESTful服务:WebAPI建立在Representational......
  • Apipost IDEA插件如何使用
    Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里给大家介绍一下Apipost-Helper的安装和使用安装在IDEA编辑器插件中心输入Apipost搜索安装:Api......