#Zookeeper JavaAPI-获取节点数据(同步)
##【实验目的】
1)熟悉zookeeperd基本服务端、客户端命令操作
2)了解如何在eclipse中编写java代码调用zookeeperAPI
3)掌握如何利用zookeeperAPI同步获取节点数据
##【实验原理】
需求描述:
通过zookeeper JavaAPI创建会话连接,并利用zookeeper对象创建节点。同创建节点类似,
判断当前连接是否连接并且事件类型是否等于None后通过zookeeper对象调用获取节点数据方法,传入满足条件的参数后并返回节点数据。
利用zookeeper对象调用异步获取节点数据方法,根据参数类型传入参数返回为空,其中需要传入实现了stringnCallBack接口的类。
在实现接口的类中实现必须的方法,在方法体中收集异步获取子节点事件返回的节点数据。
##【实验环境】
本次环境是:
一台linux服务器,IP地址: 192.168.0.201
linux平台配置如下:
Centos6.5 + jdk1.7 + zookeeper-3.4.6
日志文件存放在zookeeper目录下zookeeper.out
安装包在/soft下
注:IP视情况而定
##【实验步骤】
###一、项目准备阶段
1.1 进入linux服务器/simple目录下,切换到zookeeper-3.4.5目录下,如图1所示
![]()
1.2 利用bin/zkServer.sh start启动zookeeper服务,如图2所示
![]()
1.3 使用bin/zkServer.sh status查看服务是否启动,如图3所示
![]()
1.4 利用bin/zkCli.sh -timeout 5000 -server 192.168.1.132:2181连接测试zookeeper服务,如图4所示
![]()
###二、程序编码 — 同步获取节点数据
2.1 在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“zkTest_1”,如图5所示:
2.2在项目上通过“右键 -> build path ->configure Build Path -> libraries -> add External JARs -> File System ->Simple -> zookeeper-3.4.5”下的jar包,并打开lib文件夹添加相关jar包,(共6个jar)如图6所示:
注:分别添加zookeeper.jar和lib目录下的所有jar包
![]()
2.3 在当前项目[zkTest_1]的com.zktest包中“右键”-“new”-“class”创建“GetNodeDataSync”类。如图7所示
![]()
2.4 将类实现watcher接口并实现其方法“process(WatchedEvent event)”
```java
public class CreateNodeASync implements Watcher{
public void process(WatchedEvent event) {
}
}
```
2.5 利用zookeeper对象创建会话并设置连接zookeeper后休眠
```
zookeeper = new ZooKeeper("192.168.1.132:2181", 5000, new GetNodeDataSync ());
Thread.sleep(Integer.MAX_VALUE);
```
2.6 在“process(WatchedEvent event)”中加入判断当前状态及事件类型
```java
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
executeZk();
}
}
```
2.7 创建“public void executeZk()”方法,并在其中利用zookeeper对象获取节点数据,代码如下:
```java
public void executeZk(){
try {
System.out.println(new String(zookeeper.getData("/node3", false, stat)));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
```
2.8 在“process(WatchedEvent event)”方法中判断如果服务连接成功并且事件类型返回None则调用“executeZk()”方法,代码如下:
```java
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
executeZk();
}
}
```
2.9 程序的完成代码如下:
```java
public class GetNodeDataSync implements Watcher{
private static ZooKeeper zookeeper;
private static Stat stat;
public static void main(String[] args) throws IOException, InterruptedException {
zookeeper = new ZooKeeper("192.168.0.201:2181",5000,new GetNodeDataSync());
Thread.sleep(Integer.MAX_VALUE);
}
@Override
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
System.out.println("调用事件:"+event);
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
try {
byte[] data = zookeeper.getData("/node3", false, stat);
System.out.println(new String(data));
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
```
2.10 “右键”-“run as”-“java application”运行程序,返回同步获取节点数据,如图8所示
![]()
2.11 进入linux服务器,利用zookeeper自带客户端zkCli.sh连接服务,并查看该节点数据和控制台打印节点数据是否一致,如图9所示
![]()
#Zookeeper JavaAPI-获取子节点(同步)
##【实验目的】
1)熟悉zookeeperd基本服务端、客户端命令操作
2)了解如何在eclipse中编写java代码调用zookeeperAPI
3)掌握如何利用zookeeperAPI同步获取子节点
##【实验原理】
需求描述:
通过zookeeper JavaAPI创建会话连接,并利用zookeeper对象创建节点。同创建节点类似,
判断当前连接是否连接并且事件类型是否等于None后通过zookeeper对象调用获取子节点方法,传入满足条件的参数后并返回子节点列表。
利用zookeeper对象调用异步获取子节点方法,根据参数类型传入参数返回为空,其中需要传入实现了stringnCallBack接口的类。
在实现接口的类中实现必须的方法,在方法体中收集异步获取子节点事件返回的子节点列表。
##【实验环境】
本次环境是:
一台linux服务器,IP地址: 192.168.0.201
linux平台配置如下:
Centos6.5 + jdk1.7 + zookeeper-3.4.5
日志文件存放在zookeeper目录下zookeeper.out
安装包在/soft下
注:IP视情况而定
##【实验步骤】
###一、项目准备阶段
1.1 进入linux服务器/simple目录下,切换到zookeeper-3.4.5目录下,如图1所示
![]()
1.2 利用bin/zkServer.sh start启动zookeeper服务,如图2所示
![]()
1.3 使用bin/zkServer.sh status查看服务是否启动,如图3所示
![]()
1.4 利用bin/zkCli.sh -timeout 5000 -server 192.168.1.132:2181连接测试zookeeper服务,如图4所示
![]()
###二、程序编码 — 同步获取子节点列表
2.1 在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“zkTest_1”,如图5所示:
2.2在项目上通过“右键 -> build path ->configure Build Path -> libraries -> add External JARs -> File System ->Simple -> zookeeper-3.4.5”下的jar包,
并打开lib文件夹添加相关jar包,(共6个jar)如图6所示:
注:分别添加zookeeper.jar和lib目录下的所有jar包
![]()
2.3 在当前项目[zkTest_1]的com.zktest包中“右键”-“new”-“class”创建“GetChildrenNodeSync”类。注意添加zookeeper的jar包,如图7所示
2.4 将类实现Watcher接口并实现其方法“process(WatchedEvent event)”
```java
public class CreateNodeASync implements Watcher{
public void process(WatchedEvent event) {
}
}
```
2.5 利用zookeeper对象创建会话并设置连接zookeeper后休眠
```
zookeeper = new ZooKeeper("192.168.1.132:2181", 5000, new CreateNodeASync());
Thread.sleep(Integer.MAX_VALUE);
```
2.6 在“process(WatchedEvent event)”中加入判断当前状态及事件类型
```java
// TODO Auto-generated method stub
System.out.println("回调事件类型:"+event.getType());
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
try {
List<String> list = zookeeper.getChildren("/", true);
System.out.println(list);
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
if(event.getType() == EventType.NodeChildrenChanged){
try {
List<String> list = zookeeper.getChildren("/", true);
System.out.println(list);
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
```
2.7 创建“public void executeZk()”方法,并在其中利用zookeeper对象获取子节点,代码如下:
```java
public void executeZk(){
try {
List<String> list = zookeeper.getChildren("/",true);
System.out.println(list);
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
```
2.8 在“process(WatchedEvent event)”方法中判断如果服务连接成功并且事件类型返回None则调用“executeZk()”方法,代码如下:
```java
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
executeZk();
}
}
```
2.9 以上完整代码如下:
```java
package com.zktest;
import java.io.IOException;
import java.util.List;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
public class GetChildrenNodeSync implements Watcher{
private static ZooKeeper zookeeper;
public static void main(String[] args) throws IOException, InterruptedException {
zookeeper = new ZooKeeper("192.168.0.201:2181", 5000, new GetChildrenNodeSync());
Thread.sleep(Integer.MAX_VALUE);
}
@Override
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
System.out.println("回调事件类型:"+event.getType());
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
try {
List<String> list = zookeeper.getChildren("/", true);
System.out.println(list);
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
if(event.getType() == EventType.NodeChildrenChanged){
try {
List<String> list = zookeeper.getChildren("/", true);
System.out.println(list);
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
```
2.10“右键”-“run as”-“java application”运行程序,返回同步获取子节点列表,,如图8所示
![]()
2.11 进入linux服务器,利用zookeeper自带客户端zkCli.sh连接服务,并查看“/”下节点和控制台打印的子节点列表是否一致,,如图9所示
![]()
#Zookeeper JavaAPI-删除节点(同步)
##【实验目的】
1)熟悉zookeeperd基本操作
2)了解如何在eclipse中编写java代码调用zookeeperAPI
3)掌握如何利用zookeeperAPI同步删除节点
##【实验原理】
需求描述:
通过zookeeper JavaAPI创建会话连接,并利用zookeeper对象创建节点。同创建节点类似,
判断当前连接是否连接并且事件类型是否等于None后通过zookeeper对象调用删除节点方法,传入满足条件的参数后并返回修改节点路径,
执行程序进行删除。利用zookeeper对象调用异步删除节点方法,根据参数类型传入参数返回为空,其中需要传入实现了stringnCallBack接口的类。
在实现接口的类中实现必须的方法,在方法体中收集异步删除节点事件返回的值。
##【实验环境】
本次环境是:
一台linux服务器,IP地址: 192.168.0.201
linux平台配置如下:
Centos6.5 + jdk1.7 + zookeeper-3.4.5
日志文件存放在zookeeper目录下zookeeper.out
安装包在/soft下
注:IP视情况而定
##【实验步骤】
###一、项目准备阶段
1.1 进入linux服务器/simple目录下,切换到zookeeper-3.4.5目录下,如图1所示
![]()
1.2 利用bin/zkServer.sh start启动zookeeper服务,如图2所示
![]()
1.3 使用bin/zkServer.sh status查看服务是否启动,如图3所示
![]()
1.4 利用bin/zkCli.sh -timeout 5000 -server 192.168.1.132:2181连接测试zookeeper服务。如图4所示
![]()
###二、程序编码 — 同步删除节点
2.1 在eclipse中的项目列表中,右键点击,选择“new“—>”Java Project…”新建一个项目“zkTest_1”,如图5所示:
2.2在项目上通过“右键 -> build path ->configure Build Path -> libraries -> add External JARs -> File System ->Simple -> zookeeper-3.4.5”下的jar包,
并打开lib文件夹添加相关jar包,(共6个jar)如图6所示:
注:分别添加zookeeper.jar和lib目录下的所有jar包
![]()
2.3 在当前项目[zkTest_1]的com.zktest包中“右键”-“new”-“class”创建“DeleteNodeSync”类,如图7所示
![]()
2.4 将类实现watcher接口并实现其方法“process(WatchedEvent event)”
```java
public class DeleteNodeSync implements Watcher{
public void process(WatchedEvent event) {
}
}
```
2.5 利用zookeeper对象创建会话并设置连接zookeeper后休眠
zookeeper = new ZooKeeper("192.168.1.132:2181", 5000, new CreateNodeASync());
Thread.sleep(Integer.MAX_VALUE);
2.6 在“process(WatchedEvent event)”中加入判断当前状态及事件类型
```java
System.out.println("接收到的事件:"+ event);
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
executeZk();
}
}
```
2.7 创建“public void executeZk()”方法,并在其中利用zookeeper对象删除节点,代码如下:
```java
public void executeZk(){
System.out.println("执行Zookeeper操作");
try {
zookeeper.delete("/node3", -1);
} catch (KeeperException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
```
2.8 在“process(WatchedEvent event)”方法中判断如果服务连接成功并且事件类型返回None则调用“executeZk()”方法,代码如下:
```java
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
executeZk();
}
}
```
2.9 在“process(WatchedEvent event)”方法中判断如果服务连接成功并且事件类型返回None则调用“executeZk()”方法,代码如下:
```java
package com.zktest;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
public class DeleteNodeSync implements Watcher{
public static ZooKeeper zookeeper =null;
public static void main(String[] args) throws Exception {
zookeeper = new ZooKeeper("192.168.0.201:2181", 5000, new DeleteNodeSync());
Thread.sleep(Integer.MAX_VALUE);
}
@Override
public void process(WatchedEvent event) {
System.out.println("接收到的事件:"+ event);
if(event.getState() == KeeperState.SyncConnected){
if(event.getType() == EventType.None && null == event.getPath()){
executeZk();
}
}
}
public void executeZk(){
System.out.println("执行Zookeeper操作");
try {
zookeeper.delete("/node3", -1);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
```
2.10 “右键”-“run as”-“java application”运行程序,返回同步删除节点路径,结果,如图8所示
![]()
2.11 进入linux服务器,利用zookeeper自带客户端zkCli.sh连接服务,并查看根节点下是否存在node3,,如图9所示
![]()