Zookeeper之Java-API操作zk

Java访问Zookeeper篇

比较常用的 Java 客户端有 zkclient、curator。

一、Curator框架

由于 Curaotr 对于 zookeeper 的抽象层次比较高,简化了zookeeper 客户端的开发量。使得 curator 逐步被广泛应用。

  • 封装 zookeeper client 与 zookeeper server 之间的连接处理
  • 提供了一套 fluent 风格的操作 api
  • 提供 zookeeper 各种应用场景(共享锁、leader 选举)的抽象封装

1、依赖jar包


<dependency>
    <groupId>org.apache.curatorgroupId>
    <artifactId>curator-recipesartifactId>
    <version>4.2.0version>
dependency>

2、增删改查操作

指向项目地址:https://gitee.com/kylin1991_admin/help-s/blob/master/zookeeper-h/src/test/java/org/example/curator/CuratorDemoTest.java

3、节点事件监听

指向项目地址:https://gitee.com/kylin1991_admin/help-s/blob/master/zookeeper-h/src/test/java/org/example/curator/WatcherDemoTest.java

4、节点权限设置

指向项目地址: https://gitee.com/kylin1991_admin/help-s/blob/master/zookeeper-h/src/test/java/org/example/curator/AclDemoTest.java

5、实现分布式锁

指向项目地址:https://gitee.com/kylin1991_admin/help-s/blob/master/zookeeper-h/src/test/java/org/example/curator/LockDemoTest.java

acquire():尝试获取锁,不成功就等待

InterProcessMutex LockInternals StandardLockI acquire() internalLoc k(time,unit) 查询threadDa ta是否有当前锁,有 的话加1,重入锁特点 尝试获取锁 attemptLock() 创建锁 createsTheLock() 创建成功 尝试获取锁,未 成功就wait internalLockLoop() 实时查询获得 有序节点列表 getSortedChildren( ) 获得锁 getsTheLock() 返回PredicateResults结果(内含是否获得锁,没有获得锁就返回上一个z节点) usingWatcher 监听上一个节点 wait() 获取锁成功,返回锁path 把当前线程和锁p ath保存到th readData 线程安全的has h集合 InterProcessMutex LockInternals StandardLockI acquire() 获取锁

release():释放锁

InterProcessMutex LockInternals release() 从threadDat a获得当前线程的数据 然后对锁的lockCount次数 - 1 后判断锁 当lockCount == 0 时 releaseLock(path) deleteOurPa th(lockPath) 删除锁节点 InterProcessMutex LockInternals release()释放锁

6、实现Leader选举

指向项目地址:https://gitee.com/kylin1991_admin/help-s/blob/master/zookeeper-h/src/main/java/org/example/curator/LeaderSelectorClient.java

对于原RPC的改造

加入netty,加入zookeeper的注册中心

v1版本地址:https://blog.csdn.net/qq_39938758/article/details/105285988

v2版本地址:https://blog.csdn.net/qq_39938758/article/details/105303334

//todo 地址 v3版本:加入netty、加入Zookeeper实现注册中心

你可能感兴趣的:(•,Java架构,——【分布式协调服务】)