开源客户端Curator操作Zookeeper(CRUD)

1.curator介绍

        Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括连接重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶级项目出现,是最流行的Zookeeper客户端之一。从编码风格上来讲,它提供了基于Fluent的编程风格支持。

        除此之外,Curator还提供了Zookeeper的各种应用场景:Recipe、共享锁服务、Master选举机制和分布式计数器等。 

        我们可以在curator官网看到,Patrixck Hunt(Zookeeper作者)以一句“Guava is to Java that Curator to Zookeeper”给Curator予高度评价。

2.curator项目组件

     我们可以看到官网中的关于curator组件的最新描述如下:

        其实比较常用的也就是上面红线圈起来的三个组件,其他的我们暂时先不关注,下面对这三个组件做个简单的介绍。

组件名称描述
curator-frameworkZookeeper API的高层封装,大大简化Zookeeper客户端编程,添加了例如Zookeeper连接管理、重试机制等。
curator-recipesZookeeper典型应用场景(分布式锁、分布式计数器、leader选举等)的实现,这些实现是基于Curator Framework。
curator-clientZookeeper client的封装,用于取代原生的Zookeeper客户端(ZooKeeper类),提供一些非常有用的客户端特性

 3.curator API CRUD 操作zookeeper

        直接上代码  

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>5.2.0</version>
</dependency>

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.2.0</version>
</dependency>

      

package com.gtmap.example.zookeepercuratorexample;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat;

/**
 * @author <a href="mailto:liujie@gtmap.cn">liujie</a>
 * @version 1.0, 2021/9/7
 * @description curator客户端CRUD操作Zookeeper
 */
public class CuratorOperationExample {

    private CuratorFramework curatorFramework;

    public CuratorOperationExample() {
        //创建客户端连接
        curatorFramework = CuratorFrameworkFactory
                .builder()
                .connectString("192.168.50.89:2181")
                .connectionTimeoutMs(20000)
                .sessionTimeoutMs(15000)
                .retryPolicy(new ExponentialBackoffRetry(1000,3))
                .build();
        //启动客户端
        curatorFramework.start();
    }

    /**
     * @author <a href="mailto:liujie@gtmap.cn">liujie</a>
     * @param
     * @return
     * @description 节点进行CRUD操作
     */
    private void nodeCRUD() throws Exception {
        System.out.println("节点开始进行CRUD操作");
        //创建节点
        String value = "Hello World";
        String node=curatorFramework.create()
                .creatingParentsIfNeeded()
                .withMode(CreateMode.PERSISTENT)
                .forPath("/node",value.getBytes());
        System.out.println("节点创建成功:"+node);
        //获取节点的value
        Stat stat = new Stat();
        byte[] data = curatorFramework.getData().storingStatIn(stat).forPath(node);
        System.out.println("节点value值:" + new String(data));
        //修改节点value
        stat = curatorFramework
                .setData()
                //指定节点版本号,如果版本号不匹配则无法更新节点数据
                .withVersion(stat.getVersion())
                .forPath(node,"Update Date Result".getBytes());
        String result = new String(curatorFramework.getData().forPath(node));
        System.out.println("修改节点之后的数据:" + result);
        //删除节点
        System.out.println("开始删除节点");
        curatorFramework.delete().forPath(node);
        //判断节点是否存在
        Stat existStat = curatorFramework.checkExists().forPath(node);
        if(existStat == null) {
            System.out.println("节点删除成功");
        }
        System.out.println("节点结束进行CRUD操作");
    }

    public static void main(String[] args) throws Exception {
        CuratorOperationExample curatorOperationExample = new CuratorOperationExample();
        curatorOperationExample.nodeCRUD();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值