CuratorFramework的基本使⽤⽅法
Curator Framework提供了简化使⽤zookeeper更⾼级的API接⼝。它包涵很多优秀的特性,主要包括以下三点:
1. ⾃动连接管理:⾃动处理zookeeper的连接和重试存在⼀些潜在的问题;可以watch NodeDataChanged event和获取
updateServerList;Watches可以⾃动被Cruator recipes删除;
2. 更⼲净的API:简化raw zookeeper⽅法,事件等;提供现代流式API接⼝
3. Recipe实现:leader选举,分布式锁,path缓存,和watcher,分布式队列等。
Zookeeper在实际⽣产环境中应⽤⽐较⼴泛,⽐如SOA的服务监控系统,Hadoop,spark的分布式调度系统。Curator框架提供的优秀特性可以使得我们更加便捷的开发zookeeper应⽤。本⽂主要讲解了curator的基本使⽤⽅法。CuratorFramework实例创建
Curator框架通过CuratorFrameworkFactory以⼯⼚模式和builder模式创建CuratorFramework实例。 CuratorFramework实例都是线程安全的,我们应该当在ZooKeeper Cluster中共享同⼀个CuratorFrame
work实例。⼯⼚⽅法newClient() 提供了简便创建client实例⽅式,使⽤start和close⽅法启动和关闭客户端。使⽤Curator框架创建客户端代码如下,
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework wClient("localhost:2181", retryPolicy);
操作数据节点
zookeeper中,节点的组织类似于linux的⽂件系统,使⽤path来标识每个节点(znode),znode作为保存数据的容器,数据量限制在1M以内,这部分介绍如何使⽤curator框架创建,获取,更新,以及删除节点。
创建节点
Curator创建znode节点代码如下所⽰:
public void createNode(CuratorFramework newClient, String path, CreateMode createMode, String data) {
try {
} catch (Exception e) {
System.out.println("创建节点失败, elog=" + e.getMessage());
}
}
zookeeper中节点有两种类型,临时节点和永久节点,CreateMode类⽤于指定创建节点的类型,⽤户可以选择以下⼏个参数:
1. CreateMode.PERSISTENT: 创建节点后,不删除就永久存在
2. CreateMode.PERSISTENT_SEQUENTIAL:节点path末尾会追加⼀个10位数的单调递增的序列
3. CreateMode.EPHEMERAL:创建后,回话结束节点会⾃动删除
4. CreateMode.EPHEMERAL_SEQUENTIAL:节点path末尾会追加⼀个10位数的单调递增的序列
forPath函数指定创建节点的path和保存的数据,path的指定遵循linux⽂件path格式,创建node时指定的path,⽗path节点需要存在,否则创建节点失败,⽐如创建"/parent/child"节点,若不存在节点"parent",那么创建节点会失败。在znode中保存的数据需要进⾏序列化,⽤户可以选择使⽤JSON,XML,java内置的序列化机制,或者Hession以及Google的protocal Buffer等,为⽅便讲解,节点存储字符串数据。
获取节点数据
CuratorFramework提供getData函数,通过指定znode的path,就可以完成数据的获取。
public String getData(CuratorFramework newClient, String path){
try {
return new Data().forPath(path));
} catch (Exception e) {
System.out.println("获取数据失败, elog=" + e.getMessage());
}
return null;
}
更新节点
同样CuratorFramework提供setData函数,通过指定znode的path,可以完成数据的更新。
try catch的使用方法public void updateNodeDate(CuratorFramework newClient, String path, String data) {
try {
newClient.setData().forPath(path, Bytes());
} catch (Exception e) {
System.out.println("更新节点数据失败, elog=" + e.getMessage());
}
}
删除节点
和获取,更新节点类似,CuratorFramework提供delete函数,指定znode的path删除某⼀个节点。
public void deleteNode(CuratorFramework newClient, String path) {
try {
newClient.delete().forPath(path);
} catch (Exception e) {
System.out.println("删除节点失败, elog=" + e.getMessage());
}
}
Conclusion
本⽂和⼤家分享了CuratorFramework的基本使⽤⽅法,希望能对⼤家有所帮助。更多的使⽤⽅式可以参考官⽅给出的API⽂档。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论