zookeeper curator客户端之增删改查

zookeeper安装:https://www.cnblogs.com/zwcry/p/10272506.html

curator客户端是Apache对zookeeper原生API的封装,在原生API的基础上又支持了每次的事件监听、重试机制、递归等操作。

客户端增删改查测试类:

package com.qy.learn.zk.curator;import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryNTimes;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** @author 七脉* 描述:zookeeper教程相关代码,并非封装,而是测试学习加注释说明,教你使用。实际工作中按照公司开发的代码规范走*       apache 的Curator是封装后的客户端,本人不建议自己封装, 可以使用Curator再次封装。*/
public class MyCuratorClient {private static final Logger log = LoggerFactory.getLogger(MyCuratorClient.class);//集群节点public static final String zkServerClusterConnect = "192.168.159.129:2181,192.168.159.129:2182,192.168.159.129:2183";//单一节点public static final String zkServerSingleConnect = "192.168.159.129:2181";public static void main(String[] args) throws Exception {CuratorFramework client = client();log.info("客户端状态:{}", client.getState());client.start();log.info("客户端状态:{}", client.getState());//创建节点//create(client, "/father/me", "me");//查询节点//query(client, "/father/me");//修改节点的值//update(client, "/father/me", "newMe");//删除节点//delete(client, "/father/me");
        client.close();log.info("客户端状态:{}", client.getState());}/*** @author 七脉* 描述:获取CuratorFramework的客户端* @return*/public static CuratorFramework client(){log.info("准备创建CuratorFramework客户端");int sessionTimeoutMs = 10000;//会话超时时间int connectionTimeoutMs = 3000;//初次链接超时时间int n = 3;//重试链接次数int sleepMsBetweenRetries = 3000;//每次重试连接间隔毫秒数//RetryPolicy重试显现策略有很多,具体可以查看RetryPolicy的每个实现类进行测试。RetryPolicy retryPolicy = new RetryNTimes(n, sleepMsBetweenRetries);//CuratorFrameworkFactory.newClient是创建客户端的一种方法//CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient(zkServerClusterConnect, sessionTimeoutMs, connectionTimeoutMs, retryPolicy);//创建客户端方法还有 CuratorFrameworkFactory.builder()....CuratorFramework curatorFramework = CuratorFrameworkFactory.builder().connectString(zkServerClusterConnect).connectionTimeoutMs(connectionTimeoutMs).sessionTimeoutMs(sessionTimeoutMs).retryPolicy(retryPolicy).namespace("myspace").build();log.info("完成创建CuratorFramework客户端");return curatorFramework;}/*** @author 七脉* 描述:递归创建节点数据* @param client* @param path* @param data* @throws Exception*/public static void create(CuratorFramework client, String path, String data) throws Exception{log.info("准备递归创建节点,path:{},data:{}", path, data);client.create().creatingParentsIfNeeded()//如果path父节点不存在,一并创建.withMode(CreateMode.PERSISTENT)//永久节点.withACL(Ids.OPEN_ACL_UNSAFE)//所有可见权限.forPath(path, data.getBytes());//设置节点数据log.info("完成递归创建节点,path:{},data:{}", path, data);}/*** @author 七脉* 描述:查询节点值* @param client* @param path* @return* @throws Exception*/public static String query(CuratorFramework client, String path) throws Exception{log.info("准备查询节点:{} 值",path);String data = new String(client.getData().storingStatIn(getStat(client, path)).forPath(path));log.info("完成查询节点:{}, 值:{}", path, data);return data;}/*** @author 七脉* 描述:修改节点的值* @param client* @param path* @param data* @return* @throws Exception*/public static Stat update(CuratorFramework client, String path, String data) throws Exception{log.info("准备修改节点:{},值:{}", path, data);Stat stat = client.setData().withVersion(getStat(client, path).getVersion()).forPath(path, data.getBytes());log.info("完成修改节点:{},值:{}", path, data);return stat;}/*** @author 七脉* 描述:淡出节点* @param client* @param path* @throws Exception*/public static void delete(CuratorFramework client, String path) throws Exception{log.info("准备删除节点:{}",path);client.delete().guaranteed()//就算网络遇见抖动,只要连接成功,也会保证删除.deletingChildrenIfNeeded()//递归删除子节点
            .withVersion(getStat(client, path).getVersion()).forPath(path);log.info("完成删除节点:{}",path);}/*** @author 七脉* 描述:查询节点元数据,查询、修改、删除时需要该数据的信息作为参数*        同样也是判断节点是否存在的方法* @param client* @param path* @return* @throws Exception*/public static Stat getStat(CuratorFramework client, String path) throws Exception{log.info("准备获取 节点:{}的stat",path);Stat stat = client.checkExists().forPath(path);if(null==stat){log.info("获取节点:{} 不存在或已删除",path);}else{log.info("完成获取节点:{} stat信息, version:{}",path,stat.getVersion());}return stat;}/*** @author 七脉* 描述:测试客户端的三个状态*        client.isStarted();//官方已经建议使用该方法,后续升级可能不会对其维护,请不要再使用。*/public static void status(){CuratorFramework client = client();//client.isStarted();//官方已经建议使用该方法,后续升级可能不会对其维护,请不要再使用。log.info("客户端状态:{}", client.getState());client.start();log.info("客户端状态:{}", client.getState());client.close();log.info("客户端状态:{}", client.getState());}}

pom配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version></parent><groupId>com.qy.learn</groupId><artifactId>qy-learn-zk-curator</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion><maven.test.skip>true</maven.test.skip><java.version>1.8</java.version><spring.boot.version>2.0.1.RELEASE</spring.boot.version><qy.code.version>0.0.1-SNAPSHOT</qy.code.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><!-- 不使用springboot默认log --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.12</version><!-- 排除冲突jar --><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.1.0</version></dependency></dependencies><repositories><repository><id>nexus-aliyun</id><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>nexus-aliyun</id><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories><build><plugins><!-- 要将源码放上去,需要加入这个插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><configuration><attach>true</attach></configuration><executions><execution><phase>compile</phase><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
</project> 

源码:https://pan.baidu.com/s/1WxW0NU6p7oAiK9O3Vtq-Hg

转载于:https://www.cnblogs.com/zwcry/p/10442332.html

zookeeper curator客户端之增删改查相关推荐

  1. java springboot整合zookeeper入门教程(增删改查)

    java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...

  2. zookeeper 数据节点的增删改查

    1.连接服务端 [root@localhost bin]# ./zkCli.sh -server 127.0.0.1:2181 Connecting to 127.0.0.1:2181 2018-05 ...

  3. java上安装zookeeper并且实现增删改查

    目录 一..创建Maven工具 二.将Maven的默认配置文件设置为自己下载的配置文件(非必要) 三.在maven文件中导入zookeeper依赖 四.创建增删改查类MyzkTest 五.实现zook ...

  4. Curator基本操作(Zookeeper节点增删改查)

    Curator是Zookeeper的Java客户端库,官网为 https://curator.apache.org . 环境 Ubuntu 22.04 Zookeeper 3.7.1 JDK 17.0 ...

  5. Zookeeper后端开发工具Curator的使用 | Curator对节点的增删改查 | ACL权限控制 | 分布式锁 | 分布式计数器 | 附带最新版本下载

    前言 Curator是Apache开源的一个Java工具类,通过它操作Zookeeper会变得极度舒适! 前置条件:已掌握的基本操作,比如在后台可以增减节点.ACL权限设置等. 1.Zookeeper ...

  6. Zookeeper 客户端API调用示例(基本使用,增删改查znode数据,监听znode,其它案例,其它网络参考资料)

    9.1 基本使用 org.apache.zookeeper.Zookeeper是客户端入口主类,负责建立与server的会话 它提供以下几类主要方法  : 功能 描述 create 在本地目录树中创建 ...

  7. zkcli远程连接_ZooKeeper客户端 zkCli.sh 节点的增删改查

    zkCli.sh 在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端 ./zkCli.sh -timeout 5000  -server 127.0.0.1:2181  客户端与 ...

  8. 【SpringBoot集成ElasticSearch 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(配置+增删改查测试源码)【推荐使用】

    1.简介 SpringBoot 项目初始化时就有 NoSQL 选项 Spring Data Elasticsearch(Access+Driver) 此时 pom 文件里引入的依赖是 spring-b ...

  9. Java原始客户端操作Mongodb 增删改查

    Document方式操作增删改查 1.导入Pom依赖 2.java客户端代码 1.导入Pom依赖 <dependency><groupId>org.mongodb</gr ...

最新文章

  1. 一起学WPF系列(2):第一个WPF应用程序
  2. jdbc增删改查_JDBC第二期
  3. 今日Google图标——Frank Lloyd Wright诞辰138周年
  4. lucene 多索引目录搜索实现方法
  5. MATLAB信号处理之信号的采样
  6. 剑指 Offer II 042. 最近请求次数【队列方法】
  7. 技术项目 - MySQL多从系统的主库选择
  8. 计算机班英语试卷考法,计算机专业英语期末考试试卷A
  9. C语言学习—运算符—“~”取反符号的理解
  10. Caffe中的solver文件参数
  11. MATLAB图像处理识别商品条形码、图像分割
  12. oracleTNS-12555: TNS:permission denied、TNS-12541: TNS:no listener、Instance orcl, status UNKNOWN
  13. Datatable转为ListT / DataRow转为实体类对象
  14. html5诊断报告,放射科诊断报告模板.docx
  15. 特斯拉员工年薪曝光:软件工程师 109 万元
  16. win10自动更新导致显卡驱动出问题,No AMD Graphics driver is installed or.......的解决方案
  17. usleep java_sleep()和usleep()的使用和区别
  18. Nico的刷题日记(三)
  19. 使用多普达565(Dopod 565)几天以后的感受
  20. 172-Next.js入门

热门文章

  1. ResNet网络结构的搭建(一)
  2. AnnotationAwareAspectJAutoProxyCreator is only available on Java 1.5 and higher
  3. CF786E ALT
  4. 蜜蜂编程_没有蜜蜂就无法拼写“可预防”
  5. 华为云服务器CentOS 8.2 安装docker
  6. 终于被上涨的房价影响到了
  7. 手动解析及数据链接地址
  8. QT在使用protocal的问题解决记录之std :: string和QByteArray之间的无损转换
  9. 黑龙江省取消职称英语和计算机,2017年后黑龙江基层职称评审将不在要求职称英语成绩...
  10. 基于hexo框架快速从0到1搭建个人博客----文章写作(四)