专栏首页编程坑太多『互联网架构』软件架构-zookeeper之curator详解(36)

『互联网架构』软件架构-zookeeper之curator详解(36)

为了更好的实现java操作zookeeper服务器,后来出现Curator框架,非常的强大,目前已经是apache的顶级项目,里面提供了更多丰富的操作。例如:session超时重连,主从选举,分布式计数器,分布式锁等适用于各种复杂的zookeeper场景的API封装。 源码:https://github.com/limingios/netFuture/源码/『互联网架构』软件架构-zookeeper之curator详解(36)

官方源码

http://curator.apache.org/ 这个跟zkclient的区别是,zkclient就类似mybatis,curator类似hibernate。

  • maven依赖
<dependency>  <groupId>org.apache.curator</groupId> 基础框架  <artifactId>curator-framework</artifactId>  <version></version></dependency><dependency>  <groupId>org.apache.curator</groupId>  <artifactId>curator-recipes</artifactId> 功能 jar 分布式锁、队列等  <version></version></dependency><dependency> 客户端重试策略  <groupId>org.apache.curator</groupId>  <artifactId>curator-client</artifactId>  <version></version></dependency>
  • 使用

Curator 框架提供了一种流式接口,通过 builder 串起来,传递参数都是调方法。 Curator 框架通过 CuratorFrameworkFactory 以工厂模式和 builder 模式创建 CuratorFramework 实例。 CuratorFramework 实例都是线程安全的,你应该在你的应用中共享同一个。 工厂方法 newClient()提供了一个简单方式创建实例。 而 Builder 提供了更多的参数控制。 一旦你创建了一个 CuratorFramework 实例,你必须调用它的 start()启动,在应用退出时调用 close()方法关闭。

  • 创建 Curator 连接实例

注意:一个 Zookeeper 集群只需要构造一个 CuratorFramework 实例对象即可。CuratorFramework 使用之前必须先调用client.start();

String address = "localhost:2181";CuratorFramework  client  =  CuratorFrameworkFactory.newClient(address,  newExponentialBackoffRetry(1000, 3));//重试机制client.start()
  • CuratorFramework

提供的方法

接口类

注册监听方法

方法名

描述

create

开始创建操作, 可以调用额外的方法(比如方式 mode 或者后台执行background) 并在最后调用 forPath()指定要操作的 ZNode

Delete

开始删除操作. 可以调用额外的方法(版本或者后台处理 version or background)并在最后调用 forPath()指定要操作的 ZNode

checkExists

开始检查 ZNode 是否存在的操作. 可以调用额外的方法(监控或者后台处理)并在最后调用 forPath()指定要操作的 ZNode

getData

开始获得 ZNode 节点数据的操作. 可以调用额外的方法(监控、后台处理或者获取状态 watch, background or get stat) 并在最后调用 forPath()指定要操作的 ZNode

setData

开始设置 ZNode 节点数据的操作. 可以调用额外的方法(版本或者后台处 理) 并在最后调用 forPath()指定要操作的 ZNode

getChildren

开始获得 ZNode 的子节点列表。 以调用额外的方法(监控、后台处理或者获取状态 watch, background or get stat) 并在最后调用 forPath()指定要操作的 ZNode

inTransaction

开始是原子 ZooKeeper 事务. 可以复合 create, setData, check, and/ordelete 等操作然后调用 commit()作为一个原子操作提交

事件类型以及事件的方法

Event Type

Event Methods

CREATE

getResultCode() and getPath()

DELETE

getResultCode() and getPath()

EXISTS

getResultCode(), getPath() and getStat()

GETDATA

getResultCode(), getPath(), getStat() and getData()

SETDATA

getResultCode(), getPath() and getStat()

CHILDREN

getResultCode(), getPath(), getStat(),getChildren()

WATCHED

getWatchedEvent

监听器

Curator 提供了三种 Watcher(Cache)来监听结点的变化:

  • Path Cache 监视一个路径下子结点的创建、删除,以及结点数据的更新。产生的事件会传递给注册的 PathChildrenCacheListener。
  • Node Cache

监视一个结点的创建、更新、删除,并将结点的数据缓存在本地。

  • Tree Cache

Path Cache 和 Node Cache 的“合体”,监视路径下的创建、更新、删除事件,并缓存路径下所有子结点的数据。

重试机制

Curator 内部实现的几种重试策略:

  1. ExponentialBackoffRetry:重试指定的次数, 且每一次重试之间停顿的时间逐渐增加.
  2. RetryNTimes:指定最大重试次数的重试策略
  3. RetryOneTime:仅重试一次
  4. RetryUntilElapsed:一直重试直到达到规定的时间

分布式锁

maven引入.用分布式锁或者原子操作、队列等功能需引入

<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>${version}</version></dependency>

PS:只是个工具,apache的顶级项目,可以通过源码来学习。在文章上边提供了源码。

本文分享自微信公众号 - 编程坑太多(idig88)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 『高级篇』docker之微服务服务docker化(18)

    IT故事会
  • 「小程序JAVA实战」Springboot版mybatis逆向生成工具(32)

    PS:mybatis-generatorConfig 可以看成一个单独的项目,主要的目的就是为了升成对应的mapper.xml和对应的pojo实体类,mappe...

    IT故事会
  • springboot (十) 返回json/xml

    IT故事会
  • 七周七语言——理解多种编程范型

    从计算机发展史早期的Cobol、Fortran到后来的C、Java,编程语言的家族不断壮大。除了这些广为人知的语言外,还涌现了Erlang、Ruby等后起之秀,...

    用户3157710
  • loadrunner 脚本录制-Action分类

    在lr中用户的初始化操作应该存放在Vuser_init中。用户的结束操作存放在Vuser_end中。因为这两个Action在后面的Run Logic默认设置中...

    授客
  • 基础知识 | 每日一练(79)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    闫小林
  • 服务端 I/O 性能大比拼:Node、PHP、Java、Go哪家强?

    理解应用程序的输入/输出(I/O)模型,意味着其在计划处理负载与残酷的实际使用场景之间的差异。若应用程序比较小,也没有服务于很高的负载,也许它影响甚微。但随着应...

    Java技术栈
  • 深度学习这些“坑”你们有没有踩过(入门误区)

    椭圆这个factor实际上也是有变体的,可以以相同的思路继续拆分,继续降低训练所需数据量。

    计算机视觉研究院
  • 那些让程序员目瞪口呆的BUG

    程序员一生与bug奋战,可谓是杀敌无数,见怪不怪l了!在某知识社交平台中,一个“有哪些让程序员目瞪口呆的bug”的话题引来了6700多万的阅读,可见程序员对这个...

    编程范 源代码公司
  • 深度学习模型那么多,科学研究选哪个?

    以深度学习为代表的机器学习技术,已经在很大程度颠覆了传统学科的研究方法。然后,对于传统学科的研究人员,机器学习算法繁杂多样,到底哪种方法更适合自己的研究问题,常...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券