目录
- 1、引入pom依赖
- 2、创建节点
- 3、查询节点
- 3.1、查询指定节点数据
- 3.2、查询某个节点下所有子节点数据
- 4、修改节点
- 5、删除节点
- 6、完整代码
1、引入pom依赖
这里要注意引入的版本,因为我安装的3.6.0的zk,所有引入的也是这个版本的依赖
<!-- 引入zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.0</version>
</dependency>
2、创建节点
新建一个TestZK
测试类,这里主要有三个步骤
第一,实现Watcher 接口事件通知回调方法
第二,创建ZooKeeper 连接对象,里面需要3个参数,connectString是zk服务连接串(集群逗号隔开),sessionTimeout 是连接超时时间
第三,编写创建节点的createNode()方法,第一个参数为节点名称,第二为写入节点的数据,第四个指定节点类型(这里是持久化顺序编号节点)
package com.example.demo.utils;
import org.apache.zookeeper.*;
/**
* zookeeper节点增删改成操作
*/
public class TestZK implements Watcher {
/**
* 事件通知回调方法
* @param watchedEvent
*/
@Override
public void process(WatchedEvent watchedEvent) {
if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
System.out.println("connection success");
}
}
public static void main(String[] args) throws Exception{
//1.创建连接对象
String connectString = "192.168.xx.xxx:2181,192.168.xx.xxx:2182,192.168.xx.xxx:2183"; //服务连接串,集群逗号隔开
int sessionTimeout = 150000;//连接超时时间 (毫秒)
ZooKeeper zooKeeper = new ZooKeeper(connectString, sessionTimeout, new TestZK());
//2.创建一个znode节点
createNode( zooKeeper);
}
/**
* 创建一个znode节点
* 在根节点下创建一个 javaTest 节点,写入数据 hello
* @param zooKeeper
*/
public static void createNode(ZooKeeper zooKeeper) throws Exception{
String path = zooKeeper.create("/javaTest","hello".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
System.out.println(path);
}
}
启动mian方法之前,要先开启3zk服务的端口防火墙,否则连不上,命令如下
[root@localhost zookeepercluster]# firewall-cmd --zone=public --add-port=2181-2183/tcp --permanent
success
[root@localhost zookeepercluster]# firewall-cmd --reload
success
测试,控制台打印connection success
,并输出新建的节点路径/javaTest0000000008
connection success
19:50:33.632 [main-SendThread(192.168.xx.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x10000dc55e20006, packet:: clientPath:null serverPath:null finished:false header:: 1,1 replyHeader:: 1,8589934623,0 request:: '/javaTest,#68656c6c6f,v{s{31,s{'world,'anyone}}},2 response:: '/javaTest0000000008
/javaTest0000000008
查看zk服务中的节点,javaTest0000000008
已创建成功
[zk: 192.168.xx.xxx:2181(CONNECTED) 5] ls /
[javaTest0000000008, testnodeA, testnodeB0000000002, zookeeper]
3、查询节点
3.1、查询指定节点数据
创建getOneNode()
方法,查询javaTest0000000008
节点的数据
/**
* 查询指定节点数据
* @param zooKeeper
* @throws Exception
*/
public static void getOneNode(ZooKeeper zooKeeper) throws Exception{
byte[] data= zooKeeper.getData("/javaTest0000000008",new TestZK(),new Stat());
System.out.println(new String(data));
}
在main方法中调用
getOneNode(zooKeeper);
效果如下,获得了hello值
connection success
20:02:13.384 [main-SendThread(192.168.xx.128:2182)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x20000dc561e0001, packet:: clientPath:null serverPath:null finished:false header:: 1,4 replyHeader:: 1,8589934625,0 request:: '/javaTest0000000008,T response:: #68656c6c6f,s{8589934623,8589934623,1591530633906,1591530633906,0,0,0,0,5,0,8589934623}
hello
3.2、查询某个节点下所有子节点数据
创建getNodeList()
方法,查询根节点下所有子节点中的数据
/**
* 查询某个节点下所有子节点数据
* @param zooKeeper
* @throws Exception
*/
public static void getNodeList(ZooKeeper zooKeeper) throws Exception{
List<String> list = zooKeeper.getChildren("/",new TestZK());
for(String path :list){
byte[] data= zooKeeper.getData("/"+path,new TestZK(),null);
System.out.println(new String(data));
}
}
效果如下,获得了多个节点的值
connection success
20:04:40.692 [main-SendThread(192.168.xx.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x10000dc55e20007, packet:: clientPath:null serverPath:null finished:false header:: 1,8 replyHeader:: 1,8589934627,0 request:: '/,T response:: v{'zookeeper,'testnodeA,'testnodeB0000000002,'javaTest0000000008}
20:04:40.711 [main-SendThread(192.168.xx.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x10000dc55e20007, packet:: clientPath:null serverPath:null finished:false header:: 2,4 replyHeader:: 2,8589934627,0 request:: '/zookeeper,T response:: ,s{0,0,0,0,0,-2,0,0,0,2,0}
20:04:40.717 [main-SendThread(192.168.xx.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x10000dc55e20007, packet:: clientPath:null serverPath:null finished:false header:: 3,4 replyHeader:: 3,8589934627,0 request:: '/testnodeA,T response:: #68656c6c6f41,s{8589934600,8589934600,1591516136816,1591516136816,0,0,0,0,6,0,8589934600}
helloA
20:04:40.722 [main-SendThread(192.168.xx.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x10000dc55e20007, packet:: clientPath:null serverPath:null finished:false header:: 4,4 replyHeader:: 4,8589934627,0 request:: '/testnodeB0000000002,T response:: #68656c6c6f42,s{8589934601,8589934601,1591516195796,1591516195796,0,0,0,0,6,0,8589934601}
helloB
20:04:40.727 [main-SendThread(192.168.xx.128:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply session id: 0x10000dc55e20007, packet:: clientPath:null serverPath:null finished:false header:: 5,4 replyHeader:: 5,8589934627,0 request:: '/javaTest0000000008,T response:: #68656c6c6f,s{8589934623,8589934623,1591530633906,1591530633906,0,0,0,0,5,0,8589934623}
hello
4、修改节点
创建setNode()
方法,将/javaTest0000000008
节点中的值更新为update hello
/**
* 设置node中的值
* @param zooKeeper
* @throws Exception
*/
public static void setNode(ZooKeeper zooKeeper) throws Exception{
Stat stat = zooKeeper.setData("/javaTest0000000008","update hello".getBytes(),-1);
System.out.println(stat);
}
效果如下,值已被更新
[zk: 192.168.xx.128:2181(CONNECTED) 7] get /javaTest0000000008
update hello
5、删除节点
创建deleteNode()
方法,删除/javaTest0000000008
节点
/**
* 删除节点
* @param zooKeeper
* @throws Exception
*/
public static void deleteNode(ZooKeeper zooKeeper) throws Exception{
zooKeeper.delete("/javaTest0000000008",-1);
}
6、完整代码
package com.example.demo.utils;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import java.util.List;
/**
* zookeeper节点增删改成操作
* pdfox
*/
public class TestZK implements Watcher {
/**
* 事件通知回调方法
* @param watchedEvent
*/
@Override
public void process(WatchedEvent watchedEvent) {
if(watchedEvent.getState() == Event.KeeperState.SyncConnected){
System.out.println("connection success");
}
}
public static void main(String[] args) throws Exception{
//1.创建连接对象
String connectString = "192.168.xx.128:2181,192.168.xx.128:2182,192.168.xx.128:2183"; //服务连接串,集群逗号隔开
int sessionTimeout = 150000;//连接超时时间 (毫秒)
ZooKeeper zooKeeper = new ZooKeeper(connectString, sessionTimeout, new TestZK());
//2.创建一个znode节点
createNode( zooKeeper);
//3.查询指定节点数据
// getOneNode(zooKeeper);
//4.查询某个节点下所有子节点数据
// getNodeList(zooKeeper);
//5.设置node中的值
// setNode(zooKeeper);
//6.删除节点
// deleteNode(zooKeeper);
}
/**
* 创建一个znode节点
* 在根节点下创建一个 javaTest 节点,写入数据 hello
* @param zooKeeper
*/
public static void createNode(ZooKeeper zooKeeper) throws Exception{
String path = zooKeeper.create("/javaTest","hello".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
System.out.println(path);
}
/**
* 查询指定节点数据
* @param zooKeeper
* @throws Exception
*/
public static void getOneNode(ZooKeeper zooKeeper) throws Exception{
byte[] data= zooKeeper.getData("/javaTest0000000008",new TestZK(),new Stat());
System.out.println(new String(data));
}
/**
* 查询某个节点下所有子节点数据
* @param zooKeeper
* @throws Exception
*/
public static void getNodeList(ZooKeeper zooKeeper) throws Exception{
List<String> list = zooKeeper.getChildren("/",new TestZK());
for(String path :list){
byte[] data= zooKeeper.getData("/"+path,new TestZK(),null);
System.out.println(new String(data));
}
}
/**
* 设置node中的值
* @param zooKeeper
* @throws Exception
*/
public static void setNode(ZooKeeper zooKeeper) throws Exception{
Stat stat = zooKeeper.setData("/javaTest0000000008","update hello".getBytes(),-1);
System.out.println(stat);
}
/**
* 删除节点
* @param zooKeeper
* @throws Exception
*/
public static void deleteNode(ZooKeeper zooKeeper) throws Exception{
zooKeeper.delete("/javaTest0000000008",-1);
}
}