zookeeper中通过JavaAPI操作

步骤

  1. 创建maven项目
  2. 引入zookeeper编程依赖
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
  1. 编程使用

构建zookeeper连接

/**
* 构建zookeeper连接需要传递三个参数
* 1、connectString
* 2、连接超时时间
* 3、监听器的回调函数---监听器触发之后需要做的事情
*/
String connectString = "192.168.200.111:2181,192.168.200.112:2181,192.168.200.113:2181";
ZooKeeper zkClient = new ZooKeeper(connectString, 2000, new Watcher() {
public void process(WatchedEvent event) {
System.out.println(event.getPath() + "-" + event.getType());
}
});

查看节点的数据

// 1. 查看节点的数据
// 字节数组就是我们节点的数据
Stat stat = new Stat();
byte[] data = zkClient.getData("/test", true, stat);
System.out.println(new String(data));
System.out.println(stat.getNumChildren());
System.out.println(stat.getDataLength());

查看子节点数据

// 2. 查看子节点(第一层)
List<String> children = zkClient.getChildren("/test0000000025", false);
System.out.println(children.toString());

创建子节点

/**
* 3. 创建子节点
* 参数1:子节点路径
* 参数2:子节点数据
* 参数3:子节点的权限--不需要关注
* 参数4:子节点的类型(四大类型)
* CreateMode.PERSISTENT
* CreateMode.PERSISTENT
* CreateMode.EPHEMERAL_SEQUENTIAL
* CreateMode.PERSISTENT_SEQUENTIAL
*/
String s = zkClient.create("/test0000000026/a", "balabala".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(s);

阻塞主线程,一直处于监听的状态

/**
* 构建zookeeper连接需要传递三个参数
* 1、connectString
* 2、连接超时时间
* 3、监听器的回调函数---监听器触发之后需要做的事情
*/
String connectString = "192.168.200.111:2181,192.168.200.112:2181,192.168.200.113:2181";
zkClient = new ZooKeeper(connectString, 2000, new Watcher() {
public void process(WatchedEvent event) {
System.out.println("路径:" + event.getPath() + "----类型:" + event.getType());
try {
Stat stat = new Stat();
byte[] data = zkClient.getData("/test", true, stat);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
/**
* 让线程陷入阻塞,这样的话主线程无法结束,监听器才能执行
*/
Thread.sleep(Long.MAX_VALUE);

完整代码

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.io.IOException;
import java.util.List;
/**
* 2181 对客户端提供服务的端口
* 2888 leader与follower通讯使用
* 3888 选举leader
*/
/*
* zookeeper如果我们需要通过代码操作,此时代码就相当于是一个客户端。客户端首先需要和zookeeper服务端建立连接
*/
public class Demo {
static ZooKeeper zkClient = null;
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
/**
* 构建zookeeper连接需要传递三个参数
* 1、connectString
* 2、连接超时时间
* 3、监听器的回调函数---监听器触发之后需要做的事情
*/
String connectString = "192.168.200.111:2181,192.168.200.112:2181,192.168.200.113:2181";
zkClient = new ZooKeeper(connectString, 2000, new Watcher() {
public void process(WatchedEvent event) {
System.out.println("路径:" + event.getPath() + "----类型:" + event.getType());
try {
Stat stat = new Stat();
byte[] data = zkClient.getData("/test", true, stat);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// 1. 查看节点的数据
// 字节数组就是我们节点的数据
Stat stat = new Stat();
byte[] data = zkClient.getData("/test", true, stat);
System.out.println(new String(data));
System.out.println(stat.getNumChildren());
System.out.println(stat.getDataLength());
System.out.println("-----查看子节点-----");
// 2. 查看子节点(第一层)
List<String> children = zkClient.getChildren("/test0000000025", false);
System.out.println(children.toString());
/**
* 3. 创建子节点
* 参数1:子节点路径
* 参数2:子节点数据
* 参数3:子节点的权限--不需要关注
* 参数4:子节点的类型(四大类型)
* CreateMode.PERSISTENT
* CreateMode.PERSISTENT
* CreateMode.EPHEMERAL_SEQUENTIAL
* CreateMode.PERSISTENT_SEQUENTIAL
*/
String s = zkClient.create("/test0000000026/a", "balabala".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(s);
/**
* 让线程陷入阻塞,这样的话主线程无法结束,监听器才能执行
*/
Thread.sleep(Long.MAX_VALUE);
}
}
posted @   jsqup  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示