`

zookeeper api 增删改查

 
阅读更多
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的Znode进行增删改查操作,并讨论同步与异步两种方式的使用。 首先,要使用Java客户端API访问Zookeeper,你需要引入相关的依赖。在Maven项目中,可以在pom.xml...

    Java操作Hbase进行建表、删表以及对数据进行增删改查

    Java 操作 Hbase 进行建表、删表以及对数据进行增删改查 一、Hbase 简介 Hbase 是一个开源的、分布式的、基于 column-family 的 NoSQL 数据库。它是基于 Hadoop 的,使用 HDFS 作为其存储层。Hbase 提供了高性能、...

    zk的增删改查的例子

    【标题】"zk的增删改查的例子"指的是在分布式协调服务Zookeeper(简称zk)中实现数据操作的示例,这里的"增删改查"是数据库操作中的基本概念,代表了添加(Add)、删除(Delete)、修改(Update)和查询(Query)这...

    zk+spring+hibernate增删改查,整合实例,亲测可用

    本整合实例旨在展示如何将这三个技术相结合,实现一个完整的增删改查(CRUD)功能。以下是关于这三个技术及其整合的详细知识: **ZooKeeper**: ZooKeeper是由Apache开发的一个分布式协调服务,主要用于解决分布式...

    Dubbo demo小项目 实现了和 Mysql 连接 以及增删改查

    在本"Dubbo demo小项目"中,我们主要探讨了如何集成Dubbo框架与MySQL数据库,以便实现服务间的通信以及对数据库的基本操作,如增、删、改、查。以下是对这个项目的详细阐述: 首先,Dubbo是一个高性能、轻量级的...

    springboot+dubbo+zookeeper实现分布式系统增删改查操作和服务之间调用

    springboot+dubbo+zookeeper实现分布式系统源码,dubbo-project总工程,dubbo-usercommon服务API工程,dubbo-userprovider提供服务工程,dubbo-usercuser消费服务工程

    利用Hbase相关的API,包括对HBase的增删改查等操作

    在本文中,我们将深入探讨如何使用Java API进行HBase的操作,包括增、删、改、查等基本功能。HBase是一个分布式、版本化的NoSQL数据库,它构建在Hadoop文件系统(HDFS)之上,提供了高可靠性、高性能、可伸缩的数据...

    java链接并对hbase进行增删改查操作的实例代码(含批量插入,范围查询等,并包含所需jar包)

    Java链接HBase进行增删改查操作是大数据领域常见的任务,尤其在处理大规模分布式存储时。HBase,作为Apache Hadoop生态系统的一部分,是一个基于列族的NoSQL数据库,提供了高性能、高可扩展性的数据存储解决方案。这...

    linux中zookeeper安装包zookeeper-3.4.8.tar

    Zookeeper提供了丰富的命令行工具,如`zkCli.sh`,可以用来与Zookeeper服务器交互,进行数据的增删改查,或者查看节点状态。此外,Zookeeper的API也支持多种编程语言,如Java、Python、C++,使得开发者能方便地集成...

    java链接并对hbase进行增删改查操作的实例代码(含批量插入,范围查询等,并包含所需jar包).zip

    在Java中操作HBase数据库,通常需要通过HBase的Java API来实现数据的增、删、改、查等基本操作。HBase是一个分布式、版本化的NoSQL数据库,它基于Google的Bigtable设计,并且构建在Hadoop之上。下面将详细解释如何...

    zookeeper-3.4.11.zip

    这种模式使得服务的增删改查变得灵活,且降低了服务之间的耦合。 2. 配置管理:Zookeeper可以作为一个集中式的配置中心,Dubbo的相关配置如超时时间、重试次数等都可以存储在Zookeeper上,方便统一管理和动态调整。...

    springboot整合zookeeper权限控制.zip

    接下来,我们要实现对Zookeeper的操作,如增删改查。Spring的`CuratorFramework`提供了丰富的API来操作Zookeeper的数据节点。例如,我们可以创建一个`ZookeeperService`类,封装这些操作: ```java @Service public...

    zookeeper实践操作下载指南 1

    在连接建立后,可以进行数据的增删改查操作。`create()`方法用于创建节点,`getData()`和`setData()`分别用于读取和更新节点数据,而`delete()`方法用于删除节点。 3. **数据的增删改查操作** - `create()`方法...

    zookeeper客户端

    zookeeper客户端,简单已用,配置简单,高效,增删改查; zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API。这里主要记录下JAVA客户端API的使用。

    ZooKeeper实例.rar

    在本实例中,我们将深入探讨ZooKeeper的基本概念、工作原理以及如何使用其基本API来实现节点的增删改查操作。 **ZooKeeper基本概念** 1. **节点(ZNode)**:ZooKeeper的数据存储是以节点形式存在,每个节点都有一...

    ZooKeeper 基本概念、使用方法、实践场景

    2. 连接和操作ZooKeeper:客户端通过与ZooKeeper集群中的某个节点建立连接,然后可以进行数据节点的增删改查等操作。操作时需要关注Session的状态,因为ZooKeeper会话是有超时限制的。 实践场景: 1. 分布式锁:...

    包含zookeeper-3.4.6.tar.gz和配置文档

    - **命令行工具**:`zkCli.sh`是Zookeeper的命令行客户端,可以用来与Zookeeper集群交互,执行数据的增删改查操作。 - **Java API**:Zookeeper提供了丰富的Java API供开发者使用,包括创建、删除、更新节点,监听...

    dubbo+zookeeper+springboot项目框架源码

    在本项目中,前端可能通过调用`dubbo-demo-api`定义的接口,实现与后端服务的通信,完成数据的增删改查等操作。 总结来说,`dubbo+zookeeper+springboot`项目框架结合了三个关键技术的优势,实现了高效、可扩展的...

    solr_api

    Solr API 是Apache Solr的核心组成部分,它提供了一组丰富的HTTP接口,允许用户与Solr索引进行交互,包括查询、文档的增删改查、配置管理等操作。Solr作为一个强大的全文搜索引擎,广泛应用于各类大数据量、高性能的...

Global site tag (gtag.js) - Google Analytics