package com.jianfei.zk; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.zookeeper.CreateMode; 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.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; import org.junit.Before; import org.junit.Test; public class ZKDemo { private ZooKeeper zk = null; @Before public void init() throws IOException { zk = new ZooKeeper("hdp-node01:2081", 2000, new Watcher() { public void process(WatchedEvent event) { if(event.getType() == EventType.None) return; System.out.println(event.getType()); System.out.println(event.getPath()); //-----解决持续监听 try { //数据变化持续监听 zk.getData("/sh18qi", true, null); //子节点持续监听 zk.getChildren("/sh18qi", true); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }); } /** * 向zookeeper服务集群中注册数据,添加znode * * @throws InterruptedException * @throws KeeperException * @throws UnsupportedEncodingException */ @Test public void testCreateZnode() throws UnsupportedEncodingException, KeeperException, InterruptedException { zk.create("/sh18qi", "这是我的第一个案例".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.create("/sh18qi/banzhang", "花花".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); zk.create("/sh18qi/banmi", "草草".getBytes("UTF-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); zk.close(); } /** * 从zookeeper删除znode * @throws InterruptedException * @throws KeeperException */ @Test public void testDeleteZnode() throws InterruptedException, KeeperException{ //参数1:要删除的节点路径 //参数2:要删除的节点版本 -1 匹配所有版本 zk.delete("/sh18qi", -1); //????不监听 为什么上面方法还是执行呢? Stat exites = zk.exists("/sh18qi", false);//第二个参数,是否监听 System.out.println(exites); } /** * 修改zookeeper节点 * @throws UnsupportedEncodingException * @throws KeeperException * @throws InterruptedException */ @Test public void testUpdateZnode() throws UnsupportedEncodingException, KeeperException, InterruptedException{ byte[] data = zk.getData("/sh18qi", false, null);//默认最新 System.out.println(new String(data,"UTF-8")); zk.setData("/sh18qi", "我有一只小毛驴".getBytes("UTF-8"), -1); data = zk.getData("/sh18qi", false, null);//默认最新 System.out.println(new String(data,"UTF-8")); } /** * 查询zookeeper的子节点 * @throws KeeperException * @throws InterruptedException */ @Test public void testGetChildren() throws KeeperException, InterruptedException{ List<String> children = zk.getChildren("/sh18qi", false); for(String child : children){ System.out.println(child); } } /** * zk的监听机制: * 1.事先定义好监听的回调函数 * 2.在对znode进行各种访问操作时可以注册监听 * 3.监听的znode上发生相应的事件时,客户端zk会接收到zookeeper集群的事件通知 * 4.客户端zk根据事件调用我们事先定义好的回掉函数 * @throws InterruptedException * @throws KeeperException */ @Test public void testWatch() throws KeeperException, InterruptedException{ //在获取znode数据时注册监听 //监听器只能起到一次作用,只要监听到一次事件就失效了 //getData监听的是数据的更改 byte[] data = zk.getData("/sh18qi", true, null); //在做查询子节点操作的时候注册监听 //监听的事件就是监听节点下的子节点变化的事件 List<String> children = zk.getChildren("/sh18qi", true); Thread.sleep(Long.MAX_VALUE); //事件类型 //EventType } /** * 模拟配置文件集中管理 * 将配置文件上传到zookeeper中 * @throws IOException * @throws KeeperException * @throws InterruptedException */ public void testUploadConfigFileToZookeeper() throws IOException, KeeperException, InterruptedException{ String schema_xml = FileUtils.readFileToString(new File("g:/schema.xml")); //System.out.println(schema_xml); // zk.create("/conf", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.create("/conf/schema.xml", schema_xml.getBytes("UTF-8"),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.close(); } }
相关推荐
本文将深入探讨如何使用Java客户端API来对Zookeeper的Znode进行增删改查操作,并讨论同步与异步两种方式的使用。 首先,要使用Java客户端API访问Zookeeper,你需要引入相关的依赖。在Maven项目中,可以在pom.xml...
Java 操作 Hbase 进行建表、删表以及对数据进行增删改查 一、Hbase 简介 Hbase 是一个开源的、分布式的、基于 column-family 的 NoSQL 数据库。它是基于 Hadoop 的,使用 HDFS 作为其存储层。Hbase 提供了高性能、...
【标题】"zk的增删改查的例子"指的是在分布式协调服务Zookeeper(简称zk)中实现数据操作的示例,这里的"增删改查"是数据库操作中的基本概念,代表了添加(Add)、删除(Delete)、修改(Update)和查询(Query)这...
本整合实例旨在展示如何将这三个技术相结合,实现一个完整的增删改查(CRUD)功能。以下是关于这三个技术及其整合的详细知识: **ZooKeeper**: ZooKeeper是由Apache开发的一个分布式协调服务,主要用于解决分布式...
在本"Dubbo demo小项目"中,我们主要探讨了如何集成Dubbo框架与MySQL数据库,以便实现服务间的通信以及对数据库的基本操作,如增、删、改、查。以下是对这个项目的详细阐述: 首先,Dubbo是一个高性能、轻量级的...
springboot+dubbo+zookeeper实现分布式系统源码,dubbo-project总工程,dubbo-usercommon服务API工程,dubbo-userprovider提供服务工程,dubbo-usercuser消费服务工程
在本文中,我们将深入探讨如何使用Java API进行HBase的操作,包括增、删、改、查等基本功能。HBase是一个分布式、版本化的NoSQL数据库,它构建在Hadoop文件系统(HDFS)之上,提供了高可靠性、高性能、可伸缩的数据...
Java链接HBase进行增删改查操作是大数据领域常见的任务,尤其在处理大规模分布式存储时。HBase,作为Apache Hadoop生态系统的一部分,是一个基于列族的NoSQL数据库,提供了高性能、高可扩展性的数据存储解决方案。这...
Zookeeper提供了丰富的命令行工具,如`zkCli.sh`,可以用来与Zookeeper服务器交互,进行数据的增删改查,或者查看节点状态。此外,Zookeeper的API也支持多种编程语言,如Java、Python、C++,使得开发者能方便地集成...
在Java中操作HBase数据库,通常需要通过HBase的Java API来实现数据的增、删、改、查等基本操作。HBase是一个分布式、版本化的NoSQL数据库,它基于Google的Bigtable设计,并且构建在Hadoop之上。下面将详细解释如何...
这种模式使得服务的增删改查变得灵活,且降低了服务之间的耦合。 2. 配置管理:Zookeeper可以作为一个集中式的配置中心,Dubbo的相关配置如超时时间、重试次数等都可以存储在Zookeeper上,方便统一管理和动态调整。...
接下来,我们要实现对Zookeeper的操作,如增删改查。Spring的`CuratorFramework`提供了丰富的API来操作Zookeeper的数据节点。例如,我们可以创建一个`ZookeeperService`类,封装这些操作: ```java @Service public...
在连接建立后,可以进行数据的增删改查操作。`create()`方法用于创建节点,`getData()`和`setData()`分别用于读取和更新节点数据,而`delete()`方法用于删除节点。 3. **数据的增删改查操作** - `create()`方法...
zookeeper客户端,简单已用,配置简单,高效,增删改查; zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API。这里主要记录下JAVA客户端API的使用。
在本实例中,我们将深入探讨ZooKeeper的基本概念、工作原理以及如何使用其基本API来实现节点的增删改查操作。 **ZooKeeper基本概念** 1. **节点(ZNode)**:ZooKeeper的数据存储是以节点形式存在,每个节点都有一...
2. 连接和操作ZooKeeper:客户端通过与ZooKeeper集群中的某个节点建立连接,然后可以进行数据节点的增删改查等操作。操作时需要关注Session的状态,因为ZooKeeper会话是有超时限制的。 实践场景: 1. 分布式锁:...
- **命令行工具**:`zkCli.sh`是Zookeeper的命令行客户端,可以用来与Zookeeper集群交互,执行数据的增删改查操作。 - **Java API**:Zookeeper提供了丰富的Java API供开发者使用,包括创建、删除、更新节点,监听...
在本项目中,前端可能通过调用`dubbo-demo-api`定义的接口,实现与后端服务的通信,完成数据的增删改查等操作。 总结来说,`dubbo+zookeeper+springboot`项目框架结合了三个关键技术的优势,实现了高效、可扩展的...
Solr API 是Apache Solr的核心组成部分,它提供了一组丰富的HTTP接口,允许用户与Solr索引进行交互,包括查询、文档的增删改查、配置管理等操作。Solr作为一个强大的全文搜索引擎,广泛应用于各类大数据量、高性能的...