命令行操作
API使用
命令行操作
首先进入zookeeper客户端
cd /bin ./zkCli.sh
- ./zkClis.sh 指连接本地的zookeeper服务器
- ./zkCli.sh -server ip:port 指连接指定的服务器
命令介绍
create -s -e path data acl
-s 指顺序节点 -e 指临时节点 path 指路径,以/开头 data 指数据内容 acl 指进行权限控制
创建持久性顺序节点
create -s /zk_test 123
创建持久性节点
create /zk_test 123
创建临时顺序节点
create -s -e /zk_test 123456
因为zk_test00006是临时节点,可以通过 quit 结束当前会话后,再次进入,查看验证
读取节点
命令介绍
ls path 为查看指定路径下的下一级节点->并非所有节点
如图:ls / 只能查看到 /b和/c 查看不到 /b1和/b2
get path可以获取指定节点下的数据内容
stat path可以查看指定节点的状态信息
- cZxid 指节点被创建时的事务ID
- ctime 指创建节点的时间
- mZxid 指节点最后一次被修改时的事务ID
- mtime 指节点最后一次被修改的时间
- pZxid 表示该节点的子节点列表最后一次被修改时的事务ID.只有子节点列表更新才会更新pZid,子节点内容更新不会更新.
- cversion 指子节点的版本号
- dataVersion 指内容版本号
- aclVersion 指acl版本
- ephemeralOwner 指创建该临时节点时的会话 sessionId,如果持久性节点name值为0
- dataLength 指数据长度
- numChildren 指直系子节点个数
更新节点
命令介绍
set path data [version]
path 节点路径 data 更新内容 version 非必填 版本号
删除节点
delete paht 删除指定路径的节点,如果该节点下存在子节点,将无法删除,需要先将子节点删除后才能够删除
API使用
导入jar,版本和zookeeper一致
创建会话org.apache.zookeeper zookeeper 3.7.1
public class CreateSession implements Watcher {
private static CountDownLatch countDownLatch = new CountDownLatch(1);
public static void main(String[] args) throws IOException, InterruptedException {
String ipAndPort = "192.168.171.128:2181";
ZooKeeper zooKeeper = new ZooKeeper(ipAndPort, 5000, new CreateSession());
System.out.println(zooKeeper.getState());
//计数工具类,不让main方法结束,让线程处于阻塞状态
countDownLatch.await();
System.out.println("连接成功...");
}
@Override
public void process(WatchedEvent event) {
if (event.getState() == Event.KeeperState.SyncConnected) {
System.out.println("调用...");
countDownLatch.countDown();
}
}
}
创建节点
String nodeNamePersistent = zooKeeper.create("/zy_persistent", "持久节点".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
String nodeNamePersistentSequential = zooKeeper.create("/zy_persistent_sequential", "持久顺序节点".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
String nodeNameEphemeral = zooKeeper.create("/zy_ephemeral", "临时节点".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println("持久节点 " + nodeNamePersistent);
System.out.println("持久顺序节点 " + nodeNamePersistentSequential);
System.out.println("临时节点 " + nodeNameEphemeral);
获取节点数据
byte[] data = zooKeeper.getData("/zy_persistent", false, null);
System.out.println(new String(data));
获取某个节点的子节点
Listchildren = zooKeeper.getChildren("/", true); System.out.println(children);
更新某个节点的内容
byte[] data = zooKeeper.getData("/zy_test01", false, null);
System.out.println("修改前的节点内容: " + new String(data));
zooKeeper.setData("/zy_test01", "修改内容111".getBytes(), -1);
byte[] data1 = zooKeeper.getData("/zy_test01", false, null);
System.out.println("修改后的节点内容: " + new String(data1));
删除节点
String nodeName = "/zy_test01";
if (zooKeeper.exists(nodeName, false) != null) {
System.out.println("删除节点前: " + zooKeeper.getChildren("/", false));
zooKeeper.delete(nodeName, -1);
System.out.println("删除 " + nodeName + " 节点成功!");
System.out.println("删除节点后: " + zooKeeper.getChildren("/", false));
} else {
System.out.println(nodeName + " 节点不存在!");
}
点击获取代码
其他章节 -> 跳转
end...



