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中共享同一个CuratorFramework实例。工厂方法newClient() 提供了简便创建client实例方式,使用start和close方法启动和关闭客户端。使用Curator框架创建客户端代码如下,

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework newClient=CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);

操作数据节点

zookeeper中,节点的组织类似于linux的文件系统,使用path来标识每个节点(znode),znode作为保存数据的容器,数据量限制在1M以内,这部分介绍如何使用curator框架创建,获取,更新,以及删除节点。

创建节点

Curator创建znode节点代码如下所示:

public void createNode(CuratorFramework newClient, String path, CreateMode createMode, String data) {
try {
newClient.create().withMode(createMode).forPath(path, data.getBytes());
} 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 String(newClient.getData().forPath(path));
} catch (Exception e) {
System.out.println("获取数据失败, elog=" + e.getMessage());
}
return null;
}

更新节点

同样CuratorFramework提供setData函数,通过指定znode的path,可以完成数据的更新。

public void updateNodeDate(CuratorFramework newClient, String path, String data) {
try {
newClient.setData().forPath(path, data.getBytes());
} 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());
}
}

Zookeeper之Curator(1)客户端基本的创建,删除,更新,查找操作api的更多相关文章

  1. Neo4j:图数据库GraphDB(三)创建删除及高级操作

    本片继续前几篇介绍图数据库的创建,有疑问可以我的看看前两篇文章:http://www.cnblogs.com/rongyux/p/5537206.html 四 图数据库的创建 1 创建一个节点   P ...

  2. 《mysql必知必会》笔记3(插入、更新、删除、创建删除更新表、视图)

    十九:插入数据 1:insert语句用来将行插入数据表中,可以插入完整的行.行的一部分.插入多行.插入某些查询的结果. 2:不指定列名,可以这样插入: insert into customers va ...

  3. Microsoft Dynamics CRM service 创建,更新等操作时,注意写抛出异常时,抛出SoapException异常

    具体如下: using System.Web.Services.Protocols; try{ crmService.Update(procurementPlanEntity);//更新操作}catc ...

  4. zookeeper(2)-curator

    一.Curator介绍 zookeeper的提交人也说过,curator对于zookeeper而言就像是guava对于java差不多,更加优雅高效. 而且之前的zookeeper原生API,往往因为2 ...

  5. Zookeeper框架Curator使用

    本文参考自https://blog.csdn.net/wo541075754/article/details/69138878?utm_source=gold_browser_extension ht ...

  6. zookeeper系列(三)zookeeper的使用--开源客户端

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败, 原创博客地址:http://www.cnblogs.com/leesf456/ 奇文共欣赏,大家共同学习进步. 一.前言 上一篇博客已 ...

  7. Zookeeper(二)-- 客户端操作命令

    一.前提 开启zookeeper服务端,用客户端连接.输入help,查看可使用命令,如下图所示: 操作无非就是增删改查等. 二.增加 格式:create [-s] [-e] path data acl ...

  8. zookeeper之二 zkCli客户端命令

    ZooKeeper命令行界面(CLI)用于与ZooKeeper集合进行交互以进行开发.它有助于调试和解决不同的选项.要执行ZooKeeper CLI操作,首先打开ZooKeeper服务器(“bin/z ...

  9. zookeeper图形化的客户端工具

    追加一个zookeeper图形化的客户端工具: 1.zookeeper图像化客户端工具的下载地址:https://issues.apache.org/jira/secure/attachment/12 ...

随机推荐

  1. pip安装python模块方法

    网上搜索了很多,主流的配置方法分为两种: 摘自 1.http://www.jb51.net/article/83617.htm 安装pip的包并确定pip安装时的镜像源地址,国内常用的地址有: htt ...

  2. 201621123008 《Java程序设计》第六周实验总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 2. 书面作业 1. clone方法 1.1 在 ...

  3. [远程] windows 2008 server设置了共享文件夹,并且共享给了everyone,但是还是无法访问,怎么解决呢?

    还需要设置另外一个地方,将用户加到MSAppAccess这个组里去

  4. Asp.Net 用户验证(自定义IPrincipal和IIdentity)

    http://www.cnblogs.com/JimmyZhang/archive/2008/12/07/1349457.html

  5. classification report 使用

    别人写的,但是还是有些不清晰,我最后补上了 最后一行:第一个0.7=(0.5*1+0*1+1*3)/5  其他类似 support行:在真实数据中y_ture中class 0有一个 class 1有1 ...

  6. part1:15-安装Linux系统到开发板

    1.Qtopia简介 Qtopia是Trolltech公司为采用嵌入式Linux操作系统的消费电子设备而开发的综合应用平台,Qtopia包含完整的应用层.灵活的界面用户.窗口操作系统.应用程序启动程序 ...

  7. 643. Maximum Average Subarray I

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  8. phalapi框架where条件查询

    // WHERE name = 'dogstar' AND age = 18 $user->where(array('name' => 'dogstar', 'age' => 18) ...

  9. AngularJS标准Web业务流程开发框架-4.AngularJS四大模块之一:Controller

    一.Controller的创建 angular.controller("name",funtion($scope){ }) 1.name:控制器的名称(建议参考Java包的命名规范 ...

  10. Winfrom 嵌入word、excel实现源码

    效果图: winform中嵌入word的方法有多种:调用API,使用webBroser或使用DSOFRAMER控件: API过于繁琐: webbroser读取小文件还行,大文件就太痛苦了: 所以还是选 ...