软件架构-zookeeper之curator详解
2021/4/27 18:25:19
本文主要是介绍软件架构-zookeeper之curator详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
为了更好的实现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, 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 内部实现的几种重试策略:
- ExponentialBackoffRetry:重试指定的次数, 且每一次重试之间停顿的时间逐渐增加.
- RetryNTimes:指定最大重试次数的重试策略
- RetryOneTime:仅重试一次
- RetryUntilElapsed:一直重试直到达到规定的时间
分布式锁
maven引入.用分布式锁或者原子操作、队列等功能需引入
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${version}</version> </dependency>
PS:只是个工具,apache的顶级项目,可以通过源码来学习。在文章上边提供了源码。
这篇关于软件架构-zookeeper之curator详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding