import java.io.IOException;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;
import org.omg.CORBA.PRIVATE_MEMBER;
public class zk01 {
private static final String connectString = "192.168.40.10:2181";
private static final int sessionTimeout = 2000;
static ZooKeeper zkClient = null;
/*
*connectString -- host:port[,host:port][basePath] 指定的服务器列表,多个host:port之间用英文逗号分隔。
*sessionTimeOut -- 会话超时时间。以毫秒为单位。客户端和服务器端之间的连接通过心跳包进行维系,如果心跳包超过这个指定时间则认为会话超时失效。
*watcher -- 监视器。如果为null表示不需要观察者。
*/
@Before
public void init() throws IOException{
zkClient = new ZooKeeper(connectString, sessionTimeout,new Watcher() {
@Override
public void process(WatchedEvent event) {
//事件处理逻辑
System.out.println(event.getType()+"---"+event.getPath());
}
});
}
@Test
public void testCreateNode() throws KeeperException, InterruptedException{
//进行增删改查
/*
* 第一个参数:节点的路径
* 第二个参数:节点存放的数据
* 第三个参数:节点的权限
* 第四个参数:节点的类型(是暂时的还是持久的)
*/
String newNodeString = zkClient.create("/eclipse", "111".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
System.out.println("----------\n");
}
//判断该节点是否存在
@Test
public void existNode() throws KeeperException, InterruptedException{
/*
* 参数1:节点路径
* 参数2:是否需要监视器,若不需要填写“false”
*/
Stat exists = zkClient.exists("/a0000000004", false);
System.out.println(exists==null?"not exists":"exists");
System.out.println("----------\n");
}
//获取子节点
@Test
public void getChildren() throws KeeperException, InterruptedException{
/*
* 参数1:节点路径
* 参数2:是否需要监视器,若不需要填写“false”
*/
List<String> children = zkClient.getChildren("/a0000000004", true);
for(String child:children){
System.out.println(child);
}
System.out.println("----------\n");
}
//获取节点数据
@Test
public void nodeData() throws KeeperException, InterruptedException{
/*
* 参数1:节点路径
* 参数2:是否需要监视器,若不需要填写“false”
* 参数3:指定数据节点的状态信息:一般填写“null”或者“new stat”
*/
byte[] data = zkClient.getData("/a0000000004", false, null);
System.out.println(new String(data));//因为存放的是byte()类型数据
System.out.println("----------\n");
}
//删除节点
@Test
public void deleteNode() throws InterruptedException, KeeperException{
/*
* 参数2:version,可以传入-1,表明要基于最新版本进行更新操作
*/
zkClient.delete("/eclipse", -1);
System.out.println("----------\n");
}
//修改节点数据
@Test
public void setNodeData() throws KeeperException, InterruptedException{
byte[] data = zkClient.getData("/a0000000004", false, null);
System.out.println(new String(data));
zkClient.setData("/a0000000004", "222".getBytes(), -1);
byte[] data1 = zkClient.getData("/a0000000004", false, null);
System.out.println(new String(data1));
}
}