zookeeper curator客户端

前言

GitHub:https://github.com/yihonglei/ZooKeeper-Study

本文采用zk原生客户端方式对zk进行操作,对应github的zk-curator项目。

maven引入jar包:

<dependency>
   <groupId>org.apache.zookeeper</groupId>
   <artifactId>zookeeper</artifactId>
   <version>3.4.14</version>
</dependency>
 
<dependency>
   <groupId>org.apache.curator</groupId>
   <artifactId>curator-framework</artifactId>
   <version>4.0.0</version>
 </dependenc
 <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.0</version>
 </dependency>

 <dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-client</artifactId>
    <version>4.0.0</version>
</dependency>

一 Apache Curator

Curator 是 Netflix 公司开源的一个 Zookeeper 客户端,与 Zookeeper 提供的原生客户端 相比,

Curator 的抽象层次更高,简化了 Zookeeper 客户端的开发量。现在已是 apache的顶级开源框架,

Fluent 编程风格的实现。

二 curator实例操作

Curator 框架提供了一种流式接口,通过builder串起来,传递参数都是调方法。

Curator 框架通过 CuratorFrameworkFactory 以工厂模式和 builder 模式创建 CuratorFramework实例。 

CuratorFramework实例都是线程安全的,你应该在你的应用中 共享同一个。工厂方法newClient()提供了

一个简单方式创建实例。 而Builder提供了更多的参数控制。 一旦你创建了一个CuratorFramework实例,

你必须调用它的start()启动,在应用退出时调用close()方法关闭。

package com.lanhuigu.zookeeper;

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

/**
 * curator客户端操作
 *
 * @auther: yihonglei
 * @date: 2019-05-14 18:15
 */
public class CuratorCrud {
    private String connectString = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183";
    private CuratorFramework cf;

    public CuratorCrud() {
        //1 重试策略:初试时间为1s 重试10次
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 10);
        //2 通过工厂创建连接
        cf = CuratorFrameworkFactory.builder()
                .connectString(connectString)
                .sessionTimeoutMs(5000)
                .retryPolicy(retryPolicy)
//					.namespace("super")
                .build();
        //3 开启连接
        cf.start();
    }

    /**
     * 创建持久节点
     */
    public String createPersistent(String path, String data) {
        try {
            cf.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(path, data.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 获取信息
     */
    public String getData(String path) {
        try {
            return new String(cf.getData().forPath(path));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 删除节点
     */
    public void delete(String path) {
        try {
            cf.delete().guaranteed().deletingChildrenIfNeeded().forPath(path);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 数据写入
     */
    public void setData(String path, String data) {
        try {
            cf.setData().forPath(path, data.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 测试
     */
    public static void main(String[] args) {
        CuratorCrud curator = new CuratorCrud();

        String path = "/lanhuiguCurator";

        curator.createPersistent(path, "2019");

        System.out.println(curator.getData(path));
    }
}
发布了502 篇原创文章 · 获赞 358 · 访问量 118万+

猜你喜欢

转载自blog.csdn.net/yhl_jxy/article/details/90316518