zookeeper原生客户端:zookeeper官方提供的java客户端API
1> 创建会话
2> 创建节点
3> 读取数据
4> 更新数据
5> 检测节点是否存在
6> 权限控制
7> watch:org.apache.zookeper.Watcher(KeeperState,EventType)
a, 没有专门的API去注册watcher,依附于增删改查API
b, watch是一次性产品
c, watch的process方法中,可对不同事件进行处理
8> 原生Api的缺点:
a, 会话连接是异步的
b, Watch需要重复注册
c, Session重连机制
d, 开发复杂性较高
9> 演示代码连接ZK
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* @Description: 连接zk
* @Author: Jason.zhu
* @Create: 2019/05/16 16:27
*/
public class ZKConnect implements Watcher {
static org.slf4j.Logger logger = LoggerFactory.getLogger(ZKConnect.class);
// 连接超时时间
private static Integer timeout;
// 连接地址
private static String zkServerIp;
static {
Properties zkProperties = new Properties();
InputStream is = ZKConnect.class.getResourceAsStream("/zk.properties");
try {
zkProperties.load(is);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
logger.error("关闭流失败", e);
}
}
timeout = Integer.valueOf(zkProperties.getProperty("zk.timeout"));
zkServerIp = zkProperties.getProperty("zk.zkServerIps");
}
@Override
public void process(WatchedEvent watchedEvent) {
logger.warn("触发了[" + watchedEvent.getType().name()+"]事件");
}
public static ZooKeeper getZooKeeper(){
try {
ZooKeeper zooKeeper = new ZooKeeper(zkServerIp, timeout, new ZKConnect());
return zooKeeper;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
10> 演示代码-客户端连接后操作ZK
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:
* @Author: Jason.zhu
* @Create: 2019/05/16 16:19
*/
public class ProtoClientACL {
static Logger logger = LoggerFactory.getLogger(ProtoClientACL.class);
public static void main(String[] args) throws Exception{
ZooKeeper zooKeeper = ZKConnect.getZooKeeper();
String scheme = "digest";
String auth = DigestAuthenticationProvider.generateDigest("jason:jason123");
System.out.println("auth" + auth);
List<ACL> aclList = new ArrayList<>();
Id user1 = new Id(scheme, auth);
aclList.add(new ACL(ZooDefs.Perms.ALL, user1));
String result = zooKeeper.create("/aclNode","acl data".getBytes(), aclList, CreateMode.PERSISTENT);
if(null != result){
System.out.println("节点:"+result+"创建成功");
}
/*List<ACL> acls = zooKeeper.getACL("/aclNode",null);
for(ACL acl : acls){
System.out.println();
System.out.println("权限scheme id:" + acl.getId());
System.out.println("权限位:" + acl.getPerms());
}*/
zooKeeper.addAuthInfo(scheme,"jason:jason123".getBytes());
System.out.println(new String(zooKeeper.getData("/aclNode",true, null)));
zooKeeper.delete("/aclNode", -1);
zooKeeper.close();
}
}
11> 演示代码-客户端连接后操作ZK ACL
package net.lc7.proto;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:
* @Author: Jason.zhu
* @Create: 2019/05/16 16:19
*/
public class ProtoClientACL {
static Logger logger = LoggerFactory.getLogger(ProtoClientACL.class);
public static void main(String[] args) throws Exception{
ZooKeeper zooKeeper = ZKConnect.getZooKeeper();
String scheme = "digest";
String auth = DigestAuthenticationProvider.generateDigest("jason:jason123");
System.out.println("auth" + auth);
List<ACL> aclList = new ArrayList<>();
Id user1 = new Id(scheme, auth);
aclList.add(new ACL(ZooDefs.Perms.ALL, user1));
String result = zooKeeper.create("/aclNode","acl data".getBytes(), aclList, CreateMode.PERSISTENT);
if(null != result){
System.out.println("节点:"+result+"创建成功");
}
/*List<ACL> acls = zooKeeper.getACL("/aclNode",null);
for(ACL acl : acls){
System.out.println();
System.out.println("权限scheme id:" + acl.getId());
System.out.println("权限位:" + acl.getPerms());
}*/
zooKeeper.addAuthInfo(scheme,"jason:jason123".getBytes());
System.out.println(new String(zooKeeper.getData("/aclNode",true, null)));
zooKeeper.delete("/aclNode", -1);
zooKeeper.close();
}
}
网友评论