#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所示
 
 posted on 2020-08-31 23:36  小希米七  阅读(302)  评论(0)    收藏  举报