常用的zookeeper 操作api,持续更新中...
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;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Test Method {create/exists/delete/getChildren/setData/getData/addAuthInfo/setACL/getACL}
*
* @author yinkaipeng
*
*/
public class ZooJavaApi {
private static final int SESSION_TIMEOUT = 1000;
public static final Logger LOGGER = LoggerFactory.getLogger(ZooJavaApi.class);
public static final String HOST = "192.168.3.17:2181,192.168.3.18:2181,192.168.3.9:2181";
private static Watcher watcher = new Watcher() {
public void process(WatchedEvent we) {
LOGGER.info("process:" + we.getType());
}
};
private static ZooKeeper zookeeper;
private static void connect(){
try {
zookeeper= new ZooKeeper(HOST, SESSION_TIMEOUT, watcher);
System.out.println("I am connected ok");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
connect();
ZooJavaApi test =new ZooJavaApi();
//test.testGetChildren("/");
//test.testCreate("/zk2","hello");
//test.testGetAcl("/zk2");
//test.testSetAcl("/zk2", "yinkp:yinkp");
test.testAddAuthInfo("/zk2", "yinkp:yinkp");
test.close();
}
public void close() {
try {
zookeeper.close();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("session is close !");
}
}
public void testCreate(String znode,String data ) {
String result = null;
try {
result = zookeeper.create(str, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
System.out.println("create znode " + result);
}
public void testDelete(String znode) {
try {
zookeeper.delete(znode, -1);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
System.out.println("delete ok :" + znode);
}
public void testGetData(String znode) {
String result = null;
try {
byte[] bytes = zookeeper.getData(znode, null, null);
result = new String(bytes);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
System.out.println(znode+"数据为:" + result);
}
public void testSetData(String znode,String data) {
Stat tempStat = null;
try {
tempStat = zookeeper.setData(znode, data.getBytes(), -1);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
System.out.println("设置数据成功" + znode + "版本为:" + tempStat.getVersion());
}
public void testExists(String znode) {
Stat tempStat = null;
try {
tempStat = zookeeper.exists(znode, false);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
System.out.println(tempStat.getCzxid() == 0 ? "不存在":"存在");
}
public void testGetChildren(String znode) {
List<String> list = null;
try {
list = zookeeper.getChildren(znode, false);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
if(list.isEmpty()) {
System.out.println(path + "没有子节点");
}else {
System.out.println(path + "有子节点");
for(String childrenNode : list) {
System.out.println(" " + childrenNode );
}
}
}
public void testSetAcl(String znode,String acl) {
String aclNode = znode;
String scheme = "digest";
String authInfo = acl;
List<ACL> acls = new ArrayList<ACL>();
try {
Id id1 = new Id(scheme,DigestAuthenticationProvider.generateDigest(authInfo));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);
acls.add(acl1);
//Id id2 = new Id(scheme,DigestAuthenticationProvider.generateDigest("guest:guest"));
// ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
//acls.add(acl2);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
try {
zookeeper.setACL(aclNode, acls, -1);
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
System.out.println("znode:" + aclNode + "认证方式:" + scheme + "认证信息:" + authInfo);
}
public void testGetAcl(String znode) {
String getAclNode = znode;
List<ACL> list = null;
try {
list = zookeeper.getACL(getAclNode, new Stat());
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
if(list.isEmpty()) {
System.out.println(getAclNode + " 不存在");
}else {
System.out.println(getAclNode + " ACL如下: ");
for(ACL acl : list) {
System.out.print("\t" + acl.toString());
}
}
}
public void testAddAuthInfo(String znode,String acl) {
String addAuthInfoNode = znode;
String scheme = "digest";
String authInfo = acl;
String result = null;
try {
byte[] bytes = zookeeper.getData(addAuthInfoNode, null, null);
result = new String(bytes);
} catch (Exception e) {
System.out.println("获取异常" + result + " 报错:" + e.getMessage());
}
zookeeper.addAuthInfo(scheme, authInfo.getBytes());
try {
byte[] bytes = zookeeper.getData(addAuthInfoNode, null, null);
result = new String(bytes);
} catch (Exception e) {
System.out.println("添加异常" + result + " 报错:" + e.getMessage());
}
System.out.println("添加成功" + result);
}
}