ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

软件架构-zookeeper之curator详解

2021-04-27 18:05:55  阅读:247  来源: 互联网

标签:调用 zookeeper curator 重试 lt gt 软件架构 ZNode


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

软件架构-zookeeper之curator详解

官方源码

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

软件架构-zookeeper之curator详解

  • 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,  new
    ExponentialBackoffRetry(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:一直重试直到达到规定的时间

软件架构-zookeeper之curator详解

分布式锁

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

&lt;dependency&gt;
&lt;groupId&gt;org.apache.curator&lt;/groupId&gt;
&lt;artifactId&gt;curator-recipes&lt;/artifactId&gt;
&lt;version&gt;${version}&lt;/version&gt;
&lt;/dependency&gt;

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

标签:调用,zookeeper,curator,重试,lt,gt,软件架构,ZNode
来源: https://blog.51cto.com/u_12040702/2737317

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有