本文来说下Zookeeper的客户端Curator基本使用

文章目录

  • Curator概述
  • Curator包结构
  • 创建会话
    • 使用静态工程方法创建客户端
    • Fluent风格的Api创建会话
    • 创建包含隔离命名空间的会话
  • 数据节点操作
  • 本文小结

Curator概述

Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给Curator予高度评价。

Curator官网:https://curator.apache.org/


Curator包结构

Curator包含了几个包:

  • curator-framework:对zookeeper的底层api的一些封装
  • curator-client:提供一些客户端的操作,例如重试策略等
  • curator-recipes:封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器、分布式Barrier等

常用的maven

 <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.curator/curator-client --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-client</artifactId><version>5.1.0</version></dependency>

创建会话

使用静态工程方法创建客户端

首先应该打开zookeeper的服务端,我这里使用的是单机版

测试程序

package cn.wideth.buz.utils;import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;/**** curator创建连接session*/
public class Main {public static void main(String[] args) {//设置重试策略,1000毫秒以内最大的重试次数为3RetryPolicy policy = new ExponentialBackoffRetry(1000, 3);
//        CuratorFramework client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181")
//                .sessionTimeoutMs(5000).retryPolicy(policy).build();// 这种方式和上面使用责任链的模式来创建连接session的效果是一样的CuratorFramework client =CuratorFrameworkFactory.newClient("127.0.0.1:2181",5000,3000,policy);client.start();try {Thread.sleep(Integer.MAX_VALUE);} catch (InterruptedException e) {e.printStackTrace();}}
}

newClient静态工厂方法包含四个主要参数:

参数名 说明
connectionString 服务器列表,格式host1:port1,host2:port2,…
retryPolicy 重试策略,内建有四种重试策略,也可以自行实现RetryPolicy接口
sessionTimeoutMs 会话超时时间,单位毫秒,默认60000ms
connectionTimeoutMs 连接创建超时时间,单位毫秒,默认60000ms

测试结果


Fluent风格的Api创建会话

核心参数变为流式设置,一个列子如下:

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);CuratorFramework client =// 使用到了责任链的设计模式CuratorFrameworkFactory.builder().connectString(connectionInfo).sessionTimeoutMs(5000).connectionTimeoutMs(5000).retryPolicy(retryPolicy).build();

创建包含隔离命名空间的会话

为了实现不同的Zookeeper业务之间的隔离,需要为每个业务分配一个独立的命名空间(NameSpace),在多个应用共用一个Zookeeper集群的场景下,这对于实现不同应用之间的相互隔离十分有意义。我们知道zookeeper的本质是一个分布式的文件系统,其实就是为不同的会话创建了不同的一个根目录而已。

测试程序

package cn.wideth.buz.utils;import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;/**** 创建包含隔离命* 名空间的会话*/
public class Main {public static void main(String[] args) {//设置重试策略,1000毫秒以内最大的重试次数为3RetryPolicy policy = new ExponentialBackoffRetry(1000, 3);CuratorFramework client =CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").sessionTimeoutMs(5000).connectionTimeoutMs(5000).retryPolicy(policy).namespace("base").build();client.start();try {Thread.sleep(Integer.MAX_VALUE);} catch (InterruptedException e) {e.printStackTrace();}}
}

数据节点操作

有许多常见的命令来操作zookeeper,在zk的客户端中输入help即可

使用上面的命令,进行了数据节点的增删改查操作

测试程序

package cn.wideth.buz.utils;import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;/****  数据节点操作,其实curator就是将zk自带的*  命令封装成了,可以让开发人员调用的API。*/
public class Main {public static void main(String[] args) {//设置重试策略,1000毫秒以内最大的重试次数为3RetryPolicy policy = new ExponentialBackoffRetry(1000, 3);CuratorFramework client =CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").sessionTimeoutMs(5000).connectionTimeoutMs(5000).retryPolicy(policy).build();client.start();try {//创建一个节点client.create()// 能够自动递归创建所有所需的父节点.creatingParentContainersIfNeeded().forPath("/zkTest","hello world".getBytes());System.out.println("<=================1================>");//获取某个节点的所有子节点路径System.out.println(client.getChildren().forPath("/"));System.out.println("<=================2================>");//获取一个节点的数据内容,将字节转化成字符转System.out.println(new String(client.getData().forPath("/zkTest")));System.out.println("<=================3================>");//更新一个数据节点的内容client.setData().forPath("/zkTest","666777888".getBytes());System.out.println("<=================4================>");System.out.println(new String(client.getData().forPath("/zkTest")));//删除一个节点client.delete().forPath("/zkTest");System.out.println("<=================5================>");//获取某个节点的所有子节点路径System.out.println(client.getChildren().forPath("/"));System.out.println("<=================6================>");//检查节点是否存在System.out.println("zookeeper ===> " + client.checkExists().forPath("/zookeeper"));System.out.println("zkTest ===>" + client.checkExists().forPath("/zkTest"));System.out.println("<=================7================>");} catch (Exception e) {e.printStackTrace();}client.close();}
}

程序结果


本文小结

本文介绍了curator的基本使用,后续会对curator更加高级的操作,比如说分布式锁等常见的功能进行详细的描述。curator是用来操作zookeeper的一个非常好用的工具。

Zookeeper的客户端Curator基本使用相关推荐

  1. Zookeeper开源客户端Curator之基本功能讲解

    简介 Curator是Netflix公司开源的一套Zookeeper客户端框架.了解过Zookeeper原生API都会清楚其复杂度.Curator帮助我们在其基础上进行封装.实现一些开发细节,包括接连 ...

  2. zookeeper开源客户端Curator介绍(六)

    原文地址,转载请注明出处: https://blog.csdn.net/qq_34021712/article/details/82872311     ©王赛超  上一篇文章 介绍了zookeepe ...

  3. Zookeeper开源客户端框架Curator的简单使用

    为什么80%的码农都做不了架构师?>>>    Curator最初由Netflix的Jordan Zimmerman开发, Curator提供了一套Java类库, 可以更容易的使用Z ...

  4. Zookeeper客户端Curator使用详解

    http://www.jianshu.com/p/70151fc0ef5d Zookeeper客户端Curator使用详解 简介 Curator是Netflix公司开源的一套zookeeper客户端框 ...

  5. [转载]Zookeeper开源客户端框架Curator简介

    转载声明:http://macrochen.iteye.com/blog/1366136 Zookeeper开源客户端框架Curator简介 博客分类: Distributed Open Source ...

  6. ZooKeeper客户端Curator的基本使用

    前提:ZooKeeper版本:3.4.14      Curator版本:2.13.0 1.什么是Curator Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Z ...

  7. 【高级篇】详解Zookeeper客户端Curator

    一.序言 之前分享过一篇关于Curotor的基本应用[基础篇]详解Zookeeper客户端Curator,如果对Curator没有了解的可以看看,本文分享关于Curator的一些高级特性,在监听和le ...

  8. 【弄nèng - Zookeeper】Zookeeper入门教程(三)—— 客户端Curator的基本API使用(Curator framework)

    文章目录 1. Curator简介 2. Curator framework 3. Curator recipes 4. 基本Api 4.1 创建会话 4.1.1 使用静态工程方法创建 4.1.2 使 ...

  9. Zookeeper实战之客户端Curator vs zkClient

    1. zookeeper应用开发 Zookeeper应用开发,需要使用Zookeeper的java 客户端API ,去连接和操作Zookeeper 集群. 可以供选择的java 客户端API 有:Zo ...

最新文章

  1. 导致用户体验差造成网站跳出率过高的原因有哪些?
  2. Oracle表分区和索引分区汇总
  3. C语言 函数的封装示例(允许存在同名但形参不同函数)
  4. javascript dom追加内容的例子
  5. CJCMS系列---慢慢讲电子商务在项目中的实践之前言
  6. CVPR 2022 | 针对目标检测的重点与全局知识蒸馏(FGD)
  7. function declaration isn't a prototype解决办法
  8. linux mysql 查看字符集_Linux中查看和设置MySQL数据库字符集 一
  9. 多多农场游戏源码果园种植+养殖游戏 对接广告联盟APP+小程序
  10. 计算机绘图cad期末考试试题,20年广东理工学院成人高考期末考试 计算机绘图(AutoCAD) 复习资料.pdf...
  11. Windows 10 操作系统,更新之后无法打开Windows Mobile 设备中心,要么双击无反应。要么正在启动,过会就关闭了。
  12. 【转载】华为荣耀V9的手机录屏功能如何开启
  13. SVProgressHUD 的显示时间
  14. 超声波清洗机对人体有辐射,有伤害吗?
  15. 虚拟机ping通主机步骤_6在购买虚拟主机服务之前,请按照操作步骤进行操作
  16. Windows10 最新版官方iso镜像(截至2021/02)win10 2009(20h2)
  17. Redis从精通到入门——数据类型Zset实现源码详解
  18. 过滤汉字和特殊字符的正则表达式
  19. POSCMS 邮件服务器配置
  20. MATLAB函数解析:colormap——查看并设置当前颜色图

热门文章

  1. 深入浅出 Java 8 Lambda 表达式
  2. poj - 2488 A Knight's Journey
  3. configure: error: ZLib not installed
  4. Web 安全与 Rational AppScan 入门
  5. 彻底崩溃,一个电脑白痴和黑客的对话!
  6. 什么是A记录,子域名,CNAME别名,MX记录,TXT记录,SRV 记录,泛域名(泛解析),域名转向,域名绑定...
  7. docker搞个wordpress
  8. App的selenium,Appium爬App!
  9. springboot项目中jdk版本的问题
  10. epson me 1+只有主机能打印不能共享网络打印问题的处理