`

zookeeper-JAVA-API调用

阅读更多
一、
导入 JAR包
解压zookeeper安装包
lib 目录下的面的JAR+zookeeper.jar
新建 zookeeper的JAVA工程
新建 lib 文件夹,复制JAR包至lib文件夹中
全选 JAR,右键 --> build path --> add

二、

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

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 ZkDemo {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws InterruptedException 
	 * @throws KeeperException 
	 */
	public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

		// 内部类调用外部类的变量,变量需为 final 
		final CountDownLatch count = new CountDownLatch(1);
		// 1.创建会话
		String connectString = "192.168.76.131:2181,192.168.76.134:2181,192.168.76.132:2181" ;
		final ZooKeeper zookeeper = new ZooKeeper(connectString, 5000, new Watcher() {
			
			public void process(WatchedEvent event) {
				// 确保连接状态成功
				// 方法:使用 countDownLatch 
				if(event.getState() == KeeperState.SyncConnected){
					count.countDown();
				}
			}
		});
		// 由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞
		count.await();
		
		// 2.
		// 创建节点:同步方式,会发生阻塞,只有创建成功之后,程序才会执行下去
//		String create = zookeeper.create("/park", "abcd".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//		System.out.println(create);
		// 返回创建节点信息
		
		// 创建节点:异步方式,程序不阻塞,但执行完毕后,不保证节点创建成功
//		zookeeper.create("/park2", "abcd".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new StringCallback() {
//			
//			public void processResult(int rc, String path, Object ctx, String name) {
//				System.out.println("创建完毕:节点名称:"+name);
//			}
//		}, null);
//		while(true){
			// 什么都不做;添加原因是:异步创建节点,只有SYSO执行后才是创建成功,
			// 因为是异步执行,所以程序会继续执行下去,但因为下面无代码可执行了,程序结束了
			// 所以SYSO无输出,但节点已创建完毕
//		}
		
		// 3.删除
		// 同步方法:version:-1 匹配任务版本
//	    zookeeper.delete("/park2", -1);
		// 异步方法:		
//		zookeeper.delete("/park", -1, new VoidCallback() {
//			
//			public void processResult(int rc, String path, Object ctx) {
//				System.out.println("删除完毕:路径名称:"+path);
//			}
//		}, null);
//		while(true){}
		
		// 4.读取-子节点
//		List<String> children = zookeeper.getChildren("/", new Watcher() {
//			
//			public void process(WatchedEvent event) {
//				if(event.getType() == EventType.NodeChildrenChanged){
//					try {
//						// 运行;在虚拟机中执行 zkCli.sh create /park 
//						// 节点发生变化,控制台打印输出当前所有节点
//						// 只能监控一次变化,再次创建则无效
//						List<String> list = zookeeper.getChildren("/", false);
//						for(String s : list){
//							System.out.println(s);
//						}
//					} catch (KeeperException e) {
//						e.printStackTrace();
//					} catch (InterruptedException e) {
//						e.printStackTrace();
//					}
//				}
//			}
//		});
//		for(String s : children){
//			System.out.println(s);
//		}
//		while(true){
//			
//		}
		
		
	}

}


多次变化,均可监控到
create /aaa xxx
create /bbb xxx
delete /aaa

import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.AsyncCallback.DataCallback;
import org.apache.zookeeper.AsyncCallback.StatCallback;
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;
import org.apache.zookeeper.data.Stat;

public class ZkDemo1 {

	private static ZooKeeper zookeeper = null ;

	public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
		
		final CountDownLatch count = new CountDownLatch(1);
		String connectString = "192.168.76.131:2181,192.168.76.134:2181,192.168.76.132:2181" ;
		zookeeper = new ZooKeeper(connectString, 5000, new Watcher() {
			
			public void process(WatchedEvent event) {
				if(event.getState() == KeeperState.SyncConnected){
					count.countDown();
				}
				
				// 5.获取节点数据,当数据发生变化时
				if(event.getType() == EventType.NodeDataChanged){
					String path = event.getPath();
					System.out.println(path+"节点数据发生变化");
					try {
						byte[] datas = zookeeper.getData(path, true, null);
						System.out.println("变化后的数据:"+new String(datas));
					} catch (KeeperException e) {
						e.printStackTrace();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				
				// 7.节点创建或删除时打印
				if(event.getType() == EventType.NodeCreated ||
						event.getType() == EventType.NodeDeleted){
					String path = event.getPath();
					try {
						Stat stat = zookeeper.exists(path, true);
						System.out.println(stat);
					} catch (KeeperException e) {
						e.printStackTrace();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		});
		count.await();
		// 4.获取 childrenNode
//		List<String > list = zookeeper.getChildren("/", new ChildrenWatcher());
//		for(String s : list){
//			System.out.println(s);
//		}
		
		// 5.获取节点数据
		// 同步
		byte[] datas = zookeeper.getData("/poi", true, null);
		System.out.println(new String(datas));
		
		// 异步
		zookeeper.getData("/park", true, new DataCallback() {
			
			public void processResult(int rc, String path, Object ctx, byte[] data,
					Stat stat) {
				System.out.println(new String(data));
			}
		}, null);
		
		// 6.更新数据
		zookeeper.setData("/poi", "2222222".getBytes(), -1);
		zookeeper.setData("/park", "33333333".getBytes(), -1, new StatCallback() {
			
			public void processResult(int rc, String path, Object ctx, Stat stat) {
				System.out.println("path:"+path+"stat:"+stat);
			}
		}, null);
		
		// 7.节点是否存在
		Stat exist = zookeeper.exists("/parkx", true);
		System.out.println(exist);
		while(true){}
	}

	static class ChildrenWatcher implements Watcher{
		
		public void process(WatchedEvent event) {
			
			if(event.getType() == EventType.NodeChildrenChanged){
				
				List<String> childrenList = null ;
				try {
					// 后续的数据变更,有 Watcher 进行监控输出
					childrenList = zookeeper.getChildren("/", new ChildrenWatcher());
				} catch (KeeperException e) {
					e.printStackTrace();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				for(String s : childrenList){
					System.out.println(s);
				}
			}
		}
		
	}
}

分享到:
评论

相关推荐

    zookeeper-3.4.6.rar

    当一个服务提供者启动时,它会在ZooKeeper上注册自己的服务,而服务消费者则会通过ZooKeeper获取到服务提供者的地址列表,从而实现服务的动态调用。这种方式使得服务发现和负载均衡变得更加灵活,同时增强了系统的...

    zookeeper-3.3.6.tar.gz

    7. 客户端API:Zookeeper提供了丰富的Java和C语言的API,方便开发者进行集成和编程。 在解压"zookeeper-3.3.6.tar.gz"后,我们通常会得到如下结构的文件和目录: - bin:包含启动和停止Zookeeper的服务脚本。 - ...

    zookeeper-3.4.8解压即用

    例如,在Dubbo中,服务提供者会在ZooKeeper上注册自己,而服务消费者则通过ZooKeeper找到并调用服务提供者的接口。同样,在Spring Cloud中,Eureka或Zookeeper可以作为服务注册中心,帮助各微服务实例互相发现和通信...

    zookeeper-3.4.11.zip

    4. 客户端API:提供了丰富的Java和C语言接口,方便开发者进行集成。 三、Zookeeper在Dubbo中的应用 1. 服务注册与发现:每个Dubbo服务提供者会在启动时向Zookeeper注册自己的服务,服务消费者则可以通过Zookeeper...

    java连接zookeeper的jar包

    Java连接Zookeeper主要依赖于Apache ZooKeeper项目提供的Java客户端库,这个库包含了处理Zookeeper会话、操作数据节点以及监听事件的关键组件。在给定的压缩包文件中,可能包含了以下核心的jar包: 1. **zookeeper....

    zookeeper-3.4.12.tar.gz

    在Java环境中,我们可以使用Zookeeper的Java客户端API来与Zookeeper服务器进行交互。主要包含以下操作: 1. **连接Zookeeper**:使用`ZooKeeper`类的`connect`方法,指定服务器地址和会话超时时间。 2. **创建节点...

    zookeeper-3.4.5.jar

    在Java开发中,zookeeper-3.4.5.jar作为一个依赖库,提供了丰富的API供开发者调用,实现对Zookeeper的各种操作。 首先,命名服务是Zookeeper的基础特性之一。通过创建、删除和更新Zookeeper中的节点(ZNode),...

    Dubbo+zookeeper调用java接口

    总结起来,这个"Dubbo+zookeeper调用java接口"的案例旨在演示如何在分布式环境中,通过Dubbo和Zookeeper实现服务的发布、注册、查找和调用。开发者可以通过分析和运行这个案例,深入了解Dubbo和Zookeeper的协同工作...

    zookeeper 3.6.3 源码下载

    - `src/main/java/org/apache/zookeeper/client`:客户端的实现,包括连接管理和API调用。 - `src/main/java/org/apache/zookeeper/data`:数据模型相关的类,如ZNode的元数据结构。 - `src/main/java/org/apache/...

    zookeeper-3.4.12版本

    在Java中,Zookeeper提供了丰富的API供开发者使用,如`org.apache.zookeeper.ZooKeeper`类是核心接口,用于与Zookeeper服务器通信。通过`connect()`方法建立连接,然后可以调用`create()`, `exists()`, `getData()`,...

    zookeeper-dubbo-seata-integration-master.zip

    Dubbo会自动通过Zookeeper找到对应的服务实例进行调用。 3. 引入Seata:为了实现分布式事务,项目需要引入Seata的相关依赖,并配置Seata Server。在服务中,通过Seata提供的API进行事务的开启、提交或回滚,保证...

    zookeeper-api基础.docx

    Zookeeper 能够保证在分布式系统中数据的一致性,并且它提供的 API 允许客户端通过简单的调用来与 Zookeeper 服务进行交互。 #### 二、Zookeeper 的核心概念 ##### 2.1 ZNode ZNode(Zookeeper Node)是 ...

    zookeeper-3.4.10.tar.gz和jdk-8u171-linux-x64.gz

    对于JDK 8u171,解压`jdk-8u171-linux-x64.gz`后,将其添加到系统路径,以便在任何地方都能调用Java命令。在Linux环境下,可以将解压后的`bin`目录添加到`PATH`环境变量中,确保系统能识别Java命令。同时,还需要...

    zookeeper-3.4.13.rar

    安装完成后,开发者可以通过编写Java程序调用ZooKeeper的API来实现所需的功能。 总的来说,"zookeeper-3.4.13.rar"是一个包含了ZooKeeper稳定版本的压缩包,适合Java开发者快速搭建分布式协调服务环境。通过深入...

    5、zookeeper的java -Curator(服务注册与发现)

    在Java环境中,Curator是一个优秀的Zookeeper客户端库,简化了与Zookeeper的交互,包括服务注册与发现。本文将深入探讨如何利用Curator实现这一功能。 首先,Curator提供了一套完整的API来抽象服务注册与发现,包括...

    zookeeper-release-3.5.6-new.zip

    接着,在C代码中包含必要的头文件,并链接ZooKeeper的库,就可以调用ZooKeeper API进行操作了。 总的来说,ZooKeeper 3.5.6版的C客户端为Linux系统提供了一个强大且便捷的工具,使得开发人员可以在自己的应用中轻松...

    zookeeper-registry-example:zookeeper作为注册中心最朴素的例子

    在 Java 开发中,我们通常使用 ZooKeeper 的 Java 客户端 API 来进行交互。这个例子“zookeeper-registry-example”可能包含以下组件: 1. **服务提供者(Service Provider)**:编写 Java 代码,实现具体业务逻辑...

    ZooKeeper-分布式过程协同技术详解

    第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及...

    ZooKeeper-分布式过程协同技术详解 pdf

    第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及...

    ZooKeeper-分布式过程协同技术详解 PDF 高清完整版

    第7章介绍C语言版的API接口,也可以作为非Java语言实现的ZooKeeperAPI的基础,对非Java语言的开发人员非常有帮助。第8章介绍一款更高层级的封装的ZooKeeper接口。第三部分(第9~10章)主要介绍ZooKeeper内部原理及...

Global site tag (gtag.js) - Google Analytics