附Demo: 建议使用更好的Curator。参考:ZooKeeper客户端Curator的基本使用
package zookeeper;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.CountDownLatch;
/**
* ZooKeeper Java API测试
*/
public class ZKDemo {
/**
* 获取ZooKeeper连接
* @return
*/
public static ZooKeeper getConntection(){
ZooKeeper zooKeeper = null;
try {
final CountDownLatch countDownLatch=new CountDownLatch(1);
//watch机制(回调),监听是否连接成功
zooKeeper = new ZooKeeper("192.168.204.201:2181,192.168.204.202:2181,192.168.204.203:2181", 4000, new Watcher() {
public void process(WatchedEvent watchedEvent) {
if(Event.KeeperState.SyncConnected == watchedEvent.getState()){
//如果受收到了服务端的响应事件,连接成功
countDownLatch.countDown();
}
}
});
countDownLatch.await();
System.out.println(zooKeeper.getState());//CONNECTED
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return zooKeeper;
}
/**
* 关闭ZooKeeper连接
* @param zooKeeper
*/
public static void closeConnection(ZooKeeper zooKeeper){
try {
zooKeeper.close();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 添加节点
*/
public void add(){
ZooKeeper zooKeeper = ZKDemo.getConntection();
try {
//参数类型
//1.key
//2.value
//3.对应的ACL,当前节点的权限控制
//4.设置当前节点类型
zooKeeper.create("/zk-lzb","999".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
ZKDemo.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 获取节点信息
*/
public void get(){
ZooKeeper zooKeeper = ZKDemo.getConntection();
Stat stat = new Stat();
String data = null;
try {
byte[] bytes = zooKeeper.getData("/zk-lzb",null,stat);
data = new String(bytes,"gbk");
System.out.println("当前节点信息:"+ data);
ZKDemo.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
/**
* 修改节点信息
*/
public void modify(){
ZooKeeper zooKeeper = ZKDemo.getConntection();
Stat stat = new Stat();
//version乐观锁概念,此处需要获取version信息,则需要先get拿到节点信息
try {
//获取节点(修改需要version信息)
zooKeeper.getData("/zk-lzb",null,stat);
//再修改
zooKeeper.setData("/zk-lzb","lzb".getBytes(),stat.getVersion());
ZKDemo.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 删除节点
*/
public void delete(){
ZooKeeper zooKeeper = ZKDemo.getConntection();
Stat stat = new Stat();
try {
//获取节点(删除需要version信息)
zooKeeper.getData("/zk-lzb", null, stat);
//删除节点
zooKeeper.delete("/zk-lzb",stat.getVersion());
ZKDemo.closeConnection(zooKeeper);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
博主写作不易,来个关注呗
求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙
博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ