清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
package zookeeper;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooDefs.Perms;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
public class ZookeeperClient implements Watcher {
private static class PropertiesDynLoading {
public static final String connectString = "192.168.57.128:9181";
public static final int sessionTimeout = 3000;
public static final String authScheme = "digest";
public static final String accessKey = "cache:svcctlg";
public static final boolean authentication = false;
}
private ZooKeeper zk;
/**
* 创建zookeeper客户端
*
* @return
*/
private boolean createZkClient() {
try {
zk = new ZooKeeper(PropertiesDynLoading.connectString, PropertiesDynLoading.sessionTimeout, this);
} catch (IOException e) {
this.log("{}", e);
e.printStackTrace();
return false;
}
if (PropertiesDynLoading.authentication) {
zk.addAuthInfo(PropertiesDynLoading.authScheme, PropertiesDynLoading.accessKey.getBytes());
}
if (!isConnected()) {
log(" ZooKeeper client state [{}]", zk.getState().toString());
}
try {
if (zk.exists("/zookeeper", false) != null) {
log("create ZooKeeper Client Success! connectString", PropertiesDynLoading.connectString);
log(" ZooKeeper client state [{}]", zk.getState());
return true;
}
} catch (Exception e) {
this.log("create ZooKeeper Client Fail! connectString", PropertiesDynLoading.connectString);
e.printStackTrace();
}
return false;
}
/**
* 新增持久化节点
*
* @param path
* 节点路径
* @param data
* 节点数据
* @return
*/
private boolean createPersistentNode(String path, String data) {
if (isConnected()) {
try {
if (PropertiesDynLoading.authentication) {
zk.create(path, data.getBytes(), getAdminAcls(), CreateMode.PERSISTENT);
} else {
zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
return true;
} catch (Exception e) {
e.printStackTrace();
log("{}", e);
return false;
}
}
this.log("zookeeper state", zk.getState());
return false;
}
/**
* 创建瞬时节点
*
* @param path
* @param data
* @return
*/
private boolean creatEphemeralNode(String path, String data) {
if (isConnected()) {
try {
if (PropertiesDynLoading.authentication) {
zk.create(path, data.getBytes(), getAdminAcls(), CreateMode.PERSISTENT);
} else {
zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
}
return true;
} catch (Exception e) {
e.printStackTrace();
log("{}", e);
return false;
}
}
this.log("zookeeper state", zk.getState());
return false;
}
/**
* 修改数据
*
* @param path
* @param data
* @return
*/
private boolean setNodeData(String path, String data) {
if (isConnected()) {
try {
zk.setData(path, data.getBytes(), -1);
return true;
} catch (Exception e) {
e.printStackTrace();
this.log("{}", e);
return false;
}
}
this.log("zookeeper state = [{}]", zk.getState());
return false;
}
/**
* 删除节点
*
* @param path
* @return
*/
private boolean deleteNode(String path) {
if (isConnected()) {
try {
zk.delete(path, -1);
return true;
} catch (Exception e) {
e.printStackTrace();
this.log("{}", e);
return false;
}
}
this.log("zookeeper state = [{}]", zk.getState());
return false;
}
/**
* 获取节点值
*
* @param path
* @return
*/
public String getNodeData(String path) {
if (isConnected()) {
String data = null;
try {
byte[] byteData = zk.getData(path, true, null);
data = new String(byteData, "utf-8");
return data;
} catch (Exception e) {
e.printStackTrace();
this.log("{}", e);
return null;
}
}
this.log("zookeeper state = [{}]", zk.getState());
return null;
}
/**
* 获取path子节点名列表
*
* @param path
* @return
*/
public List<String> getChildren(String path) {
if (isConnected()) {
String data = null;
try {
return zk.getChildren(path, false);
} catch (Exception e) {
e.printStackTrace();
this.log("{}", e);
return null;
}
}
this.log("zookeeper state = [{}]", zk.getState());
return null;
}
public boolean startZkClient() {
return createZkClient();
}
/**
* zookeeper是否连接服务器
*
* @return
*/
public boolean isConnected() {
return zk.getState().isConnected();
}
/**
* 是否存在path路径节点
*
* @param path
* @return
*/
public boolean exists(String path) {
try {
return zk.exists(path, false) != null;
} catch (Exception e) {
this.log("{}", e);
}
return false;
}
/**
* 关闭zookeeper
*/
public void closeZk() {
if (isConnected()) {
try {
zk.close();
this.log("close zookeeper [{}]", "success");
} catch (InterruptedException e) {
this.log("zookeeper state = [{}]", e);
e.printStackTrace();
}
} else {
this.log("zookeeper state = [{}]", zk.getState());
}
}
/**
*
* @return
*/
public List<ACL> getCreateNodeAcls() {
List<ACL> listAcls = new ArrayList<ACL>(3);
try {
Id id = new Id(PropertiesDynLoading.authScheme,
DigestAuthenticationProvider.generateDigest(PropertiesDynLoading.accessKey));
ACL acl = new ACL(Perms.CREATE, id);
listAcls.add(acl);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return Ids.OPEN_ACL_UNSAFE;
}
return listAcls;
}
public List<ACL> getAdminAcls() {
List<ACL> listAcls = new ArrayList<ACL>(3);
try {
Id id = new Id(PropertiesDynLoading.authScheme,
DigestAuthenticationProvider.generateDigest(PropertiesDynLoading.accessKey));
ACL acl = new ACL(Perms.ALL, id);
listAcls.add(acl);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return Ids.OPEN_ACL_UNSAFE;
}
return listAcls;
}
public void log(String format, Object args) {
int index = format.indexOf("{");
StringBuilder sb = new StringBuilder(format);
sb.insert(index + 1, "%s");
System.out.println(String.format(sb.toString(), args));
}
@Override
public void process(WatchedEvent event) {
}
public static void main(String[] args) {
ZookeeperClient zkc = new ZookeeperClient();
zkc.createZkClient();
if (!zkc.exists("/windowcreate")) {
zkc.createPersistentNode("/windowcreate", "windowcreate");
}
if (!zkc.exists("/windowcreate/value")) {
System.out.println("not exists /windowcreate/value");
zkc.createPersistentNode("/windowcreate/value", "A0431P001");
}
if (!zkc.exists("/windowcreate/valuetmp")) {
System.out.println("not exists /windowcreate/valuetmp");
zkc.creatEphemeralNode("/windowcreate/valuetmp", "A0431P002");
}
System.out.println(zkc.getNodeData("/zookeeper"));
System.out.println(zkc.getChildren("/windowcreate"));
System.out.println(zkc.getNodeData("/windowcreate/value"));
System.out.println(zkc.getNodeData("/windowcreate/valuetmp"));
zkc.setNodeData("/windowcreate/value", "A0431P003");
System.out.println(zkc.getNodeData("/windowcreate/value"));
zkc.deleteNode("/windowcreate/value");
System.out.println(zkc.exists("/windowcreate/value"));
zkc.closeZk();
}
}