使用java操作Zookeeper服务端
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
public class Test001 {
//zk 连接地址
private static final String CONNECTSTRING = "127.0.0.1:2181";
//zk session 超时时间
private static final int SESSIONTIMEOUT = 500;
//使用java并发包 信号量技术
private static final CountDownLatch countDownLatch = new CountDownLatch(1);
public static void main(String[] args) {
ZooKeeper zooKeeper = null;
try {
//1. ZooKeeper 创立了一个连接
zooKeeper = new ZooKeeper(CONNECTSTRING, SESSIONTIMEOUT, new Watcher() {
public void process(WatchedEvent event) {
// 监听节点是否发生变化
// 获取时间状态
KeeperState keeperState = event.getState();
// 获取事件类型
EventType eventType = event.getType();
if (KeeperState.SyncConnected == keeperState) {
if (EventType.None == eventType) {
countDownLatch.countDown();//调用该方法的时候会做减1,如果为0的话
System.out.println("zk 启动连接...");
}
}
}
});
//2. 节点类型
//1. CreateMode.EPHEMERAL 创建一个临时节点
//2. CreateMode.EPHEMERAL_SEQUENTIAL 如果节点发生重复的情况下,会自动id 自增,保证唯一性
//3. CreateMode.PERSISTENT 持久类型 永久保存在硬盘上
//4. CreateMode.PERSISTENT_SEQUENTIAL 持久类型 如果节点发生重复的情况下,会自动id 自增,保证唯一性
/**
* "/test" : 节点名称
* "zhangsan".getBytes() : 节点值
* Ids.OPEN_ACL_UNSAFE : 节点test接入权限
*/
countDownLatch.await();// 如果我的计数器不是为0的话,会一直等待
String nodeResult = zooKeeper.create("/test", "zhangsan".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("节点名称:" + nodeResult);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(zooKeeper != null){
try {
zooKeeper.close();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
1.直接运行main方法
2.通过Zookeeper客户端查询 (节点属于父节点)
3.注意的地方
上面代码是在test2节点创建test节点
如果Zookeeper没有test2父节点的话,直接报错