前言
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));
}
}