目录
一、常用客户端
zk目前有三种客户端:原生API、zkClient、Curator
主要学习原生API、zkClient
1.1 原生API
1.1.1 增删改查
//客户端的基本操作
public class TestJavaApi implements Watcher{
private static final int SESSION_TIMEOUT = 10000;
private static final String CONNECTION_STRING = "127.0.0.1:2181";
private static final String ZK_PATH = "/zc";
private ZooKeeper zk = null;
private CountDownLatch connectedSemaphore = new CountDownLatch(1);
//创建zc连接
public void createConnecting(String connectString,int sessionTimeout) {
System.out.println("createConnecting,1,正在连接");
this.releaseConnection();
try {
System.out.println("createConnecting,2,正在连接");
zk = new ZooKeeper(connectString, sessionTimeout, this);
System.out.println("createConnecting,3,await()");
connectedSemaphore.await();
System.out.println("createConnecting,4,连接成功");
}catch (Exception e) {
System.out.println("连接失败:" + e.getMessage());
}
}
//关闭连接
public void releaseConnection() {
if(null != this.zk) {
try {
this.zk.close();
} catch (Exception e) {
System.out.println("关闭失败:" + e.getMessage());
}
}
}
//创建节点
public boolean createPath(String path,String data) {
try {
System.out.println("节点创建成功:" +
this.zk.create(path,data.getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL));
} catch (Exception e) {
System.out.println("节点创建失败");
}
return true;
}
//读取指定节点的内容
public String readData(String path) {
try {
String resultStr = new String(this.zk.getData(path, false, null));
System.out.println("节点内容:" + resultStr);
return resultStr;
} catch (Exception e) {
return "";
}
}