没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
主讲老师:Fox
有道笔记:
学习本节课的基础: 掌握Zookeeper的节点特性和监听机制
ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户
端API有:
ZooKeeper官方的客户端API提供了基本的操作。例如,创建会话、创建节点、读取节点、更新数据、
删除节点和检查节点是否存在等。不过,对于实际开发来说,ZooKeeper官方API有一些不足之处,具
体如下:
总之,ZooKeeper官方API功能比较简单,在实际开发过程中比较笨重,一般不推荐使用。
引入zookeeper client依赖
注意:保持与服务端版本一致,不然会有很多兼容性的问题
https://note.youdao.com/s/a3vbCh9A
1. Zookeeper Java客户端实战
ZooKeeper官方的Java客户端API。
第三方的Java客户端API,比如Curator。
ZooKeeper的Watcher监测是一次性的,每次触发之后都需要重新进行注册。
会话超时之后没有实现重连机制。
异常处理烦琐,ZooKeeper提供了很多异常,对于开发人员来说可能根本不知道应该如何处理这些抛出的异常。
仅提供了简单的byte[]数组类型的接口,没有提供Java POJO级别的序列化数据处理接口。
创建节点时如果抛出异常,需要自行检查节点是否存在。
无法实现级联删除。
1.1 Zookeeper 原生Java客户端使用
<!-- zookeeper client -->1
<dependency>2
<groupId>org.apache.zookeeper</groupId>3
<artifactId>zookeeper</artifactId>4
<version>3.8.0</version>5
</dependency>6
ZooKeeper原生客户端主要使用org.apache.zookeeper.ZooKeeper这个类来使用ZooKeeper服务。
使用 zookeeper 原生 API,连接zookeeper集群
ZooKeeper常用构造器
ZooKeeper (connectString, sessionTimeout, watcher)1
connectString:使用逗号分隔的列表,每个ZooKeeper节点是一个host.port对,host 是机器名或者IP地址,
port是ZooKeeper节点对客户端提供服务的端口号。客户端会任意选取connectString 中的一个节点建立连接。
sessionTimeout : session timeout时间。
watcher:用于接收到来自ZooKeeper集群的事件。
public class ZkClientDemo {1
2
private static final String CONNECT_STR="localhost:2181";3
private final static String
CLUSTER_CONNECT_STR="192.168.65.156:2181,192.168.65.190:2181,192.168.65.200:2181";
4
5
public static void main(String[] args) throws Exception {6
7
final CountDownLatch countDownLatch=new CountDownLatch(1);8
ZooKeeper zooKeeper = new ZooKeeper(CLUSTER_CONNECT_STR,9
4000, new Watcher() {10
@Override11
public void process(WatchedEvent event) {12
if(Event.KeeperState.SyncConnected==event.getState() 13
&& event.getType()== Event.EventType.None){14
//如果收到了服务端的响应事件,连接成功15
countDownLatch.countDown();16
System.out.println("连接建立");17
}18
}19
});20
System.out.printf("连接中");21
countDownLatch.await();22
//CONNECTED23
方法特点:
同步创建节点:
System.out.println(zooKeeper.getState());24
25
//创建持久节点26
zooKeeper.create("/user","fox".getBytes(),27
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);28
29
}30
31
}32
Zookeeper主要方法
create(path, data, acl,createMode): 创建一个给定路径的 znode,并在 znode 保存 data[]的 数据,
createMode指定 znode 的类型。
delete(path, version):如果给定 path 上的 znode 的版本和给定的 version 匹配, 删除 znode。
exists(path, watch):判断给定 path 上的 znode 是否存在,并在 znode 设置一个 watch。
getData(path, watch):返回给定 path 上的 znode 数据,并在 znode 设置一个 watch。
setData(path, data, version):如果给定 path 上的 znode 的版本和给定的 version 匹配,设置 znode 数据。
getChildren(path, watch):返回给定 path 上的 znode 的孩子 znode 名字,并在 znode 设置一个 watch。
sync(path):把客户端 session 连接节点和 leader 节点进行同步。
所有获取 znode 数据的 API 都可以设置一个 watch 用来监控 znode 的变化。
所有更新 znode 数据的 API 都有两个版本: 无条件更新版本和条件更新版本。如果 version 为 -1,更新为无条
件更新。否则只有给定的 version 和 znode 当前的 version 一样,才会进行更新,这样的更新是条件更新。
所有的方法都有同步和异步两个版本。同步版本的方法发送请求给 ZooKeeper 并等待服务器的响 应。异步版本
把请求放入客户端的请求队列,然后马上返回。异步版本通过 callback 来接受来 自服务端的响应。
@Test1
public void createTest() throws KeeperException, InterruptedException {2
String path = zooKeeper.create(ZK_NODE, "data".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
3
log.info("created path: {}",path);4
}5
异步创建节点:
修改节点数据
Curator是Netflix公司开源的一套ZooKeeper客户端框架,和ZkClient一样它解决了非常底层的细节
开发工作,包括连接、重连、反复注册Watcher的问题以及NodeExistsException异常等。
Curator是Apache基金会的顶级项目之一,Curator具有更加完善的文档,另外还提供了一套易用性和
可读性更强的Fluent风格的客户端API框架。
Curator还为ZooKeeper客户端框架提供了一些比较普遍的、开箱即用的、分布式开发用的解决方案,
例如Recipe、共享锁服务、Master选举机制和分布式计算器等,帮助开发者避免了“重复造轮子”的
@Test1
public void createAsycTest() throws InterruptedException {2
zooKeeper.create(ZK_NODE, "data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,3
CreateMode.PERSISTENT,4
(rc, path, ctx, name) -> log.info("rc {},path {},ctx {},name
{}",rc,path,ctx,name),"context");
5
TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);6
}7
@Test1
public void setTest() throws KeeperException, InterruptedException {2
3
Stat stat = new Stat();4
byte[] data = zooKeeper.getData(ZK_NODE, false, stat);5
log.info("修改前: {}",new String(data));6
zooKeeper.setData(ZK_NODE, "changed!".getBytes(), stat.getVersion());7
byte[] dataAfter = zooKeeper.getData(ZK_NODE, false, stat);8
log.info("修改后: {}",new String(dataAfter));9
}10
1.2 Curator开源客户端使用
无效开发工作。
Guava is to Java that Curator to ZooKeeper
在实际的开发场景中,使用Curator客户端就足以应付日常的ZooKeeper集群操作的需求。
官网:
Curator 包含了几个包:
https://curator.apache.org/
引入依赖
curator-framework是对ZooKeeper的底层API的一些封装。
curator-client提供了一些客户端的操作,例如重试策略等。
curator-recipes封装了一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器、分布式Barrier
等。
<!-- zookeeper client -->1
<dependency>2
<groupId>org.apache.zookeeper</groupId>3
<artifactId>zookeeper</artifactId>4
<version>3.8.0</version>5
</dependency>6
7
<!--curator-->8
<dependency>9
<groupId>org.apache.curator</groupId>10
<artifactId>curator-recipes</artifactId>11
<version>5.1.0</version>12
<exclusions>13
<exclusion>14
<groupId>org.apache.zookeeper</groupId>15
<artifactId>zookeeper</artifactId>16
</exclusion>17
</exclusions>18
</dependency>19
创建一个客户端实例
剩余25页未读,继续阅读
资源评论
yl28537
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功