zookeeper中通过JavaAPI操作
步骤
- 创建maven项目
- 引入zookeeper编程依赖
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
- 编程使用
构建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);
}
}
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/16662088.html