代码::https://gitee.com/jly521/ZooKeeper-book.gitjava
开源的ZooKeeper 客户端git
- 封装了不少底层细节
- Apache 顶级项目
- 还提供了ZooKeeper各类应用场景:
- Recipe共享锁服务
- Master选举机制
- 分布式计数器
- 等等
建立会话api
public static void main(String[] args) throws Exception{
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client =
CuratorFrameworkFactory.newClient("192.168.48.133:2181",
5000,
3000,
retryPolicy);
client.start();
Thread.sleep(Integer.MAX_VALUE);
}



- 使用Fluent风格的API接口来建立一个ZooKeeper客户端


- guaranteed() 接口
- 客户端碰到网络异常的时候,会不停的重试删除须要删除的节点,知道成功
- 异步接口




Curator 典型应用场景:服务器





- Master 选举
- 咱们常常遇到这样的问题,遇到复杂的问题须要从集群中选择一台进行处理
- 好比:多台客户端机器同时某节点建立相同本身节点,最终只有一台能成功建立
- Curator进行了封装,只须要简单的api 就可实现Master 选举
- 成功获取Master 权力会回调监听器
- 执行完takeLeadership 方法,会自动释放Master 权力

- 分布式锁
- 分布式环境中,为了保证数据的一致性,常常在程序的某个运行点须要同步
- 好比减库存操做或流水号生成操做
- 例如流水号:
- 普通的流水号生成使用时间戳,可是在并发量过大的状况下会出现问题
- 可以使用Curator 实现分布式锁
- 分布式计数器
- 很容易基于分布式锁实现一个分布式计数器
- 分布式Barrier
- 控制多线程之间同步的经典方式,类比jdk自带的CyclicBarrier
- 等待全部线程准备就绪,一块儿开始执行新的任务
- 还可协调同时进入同时退出
工具网络
- ZKPaths
- 提供了一个简单的API 来构建ZNode路径、递归建立、删除节点等;
- EnsurePath
- TestServer
- 为了方便开发人员进行方便测试
- 提供启动简易ZooKeeper方法:TestServer
- 容许开发人员很是方便启动一台标准的ZooKeeper服务器,进行单元测试

