Apache Curator操纵zookeeper的API使用

时间:2021-12-31 01:40:31

标签:

curator简介与客户端之间的异同点

常用的zookeeper java客户端:

zookeeper原生Java API

zkclient

Apache curator

ZooKeeper原生Java API的不敷之处:

在连接zk超时的时候,不撑持自动重连,需要手动操纵

Watch注册一次就会掉效,需要重复注册

不撑持递归创建节点

Apache curator:

Apache 的开源项目

解决Watch注册一次就会掉效的问题

供给的 API 越发简单易用

供给更多解决方案并且实现简单,例如:漫衍式锁

供给常用的ZooKeeper工具类

编程气势派头更舒服,

搭建maven工程,成立curator与zkserver的连接

创建一个普通的maven工程,在pom.xml文件中,配置如下依赖:

<dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.11</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.4</version> </dependency> </dependencies>

配置完依赖后,我们就可以来写一个简单的demo测试与zookeeper处事真个连接。代码如下:

package org.zero01.zk.curator; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.ExponentialBackoffRetry; /** * @program: zookeeper-connection * @description: 成立curator与zkserver的连接演示demo * @author: 01 * @create: 2018-04-28 09:44 **/ public class CuratorConnect { // Curator客户端 public CuratorFramework client = null; // 集群模式则是多个ip private static final String zkServerIps = "192.168.190.128:2181,192.168.190.129:2181,192.168.190.130:2181"; public CuratorConnect(){ /** * 同步创建zk示例,原生api是异步的 * 这一步是设置重连计谋 * * ExponentialBackoffRetry结构器参数: * curator链接zookeeper的计谋:ExponentialBackoffRetry * baseSleepTimeMs:初始sleep的时间 * maxRetries:最大重试次数 * maxSleepMs:最大重试时间 */ RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5); // 实例化Curator客户端,Curator的编程气势派头可以让我们使用要领链的形式完成客户真个实例化 client = CuratorFrameworkFactory.builder() // 使用工厂类来建造客户真个实例东西 .connectString(zkServerIps) // 放入zookeeper处事器ip .sessionTimeoutMs(10000).retryPolicy(retryPolicy) // 设定会话时间以及重连计谋 .build(); // 成立连接通道 // 启动Curator客户端 client.start(); } // *zk客户端连接 private void closeZKClient() { if (client != null) { this.client.close(); } } public static void main(String[] args) throws InterruptedException { // 实例化 CuratorConnect curatorConnect = new CuratorConnect(); // 获取当前客户真个状态 boolean isZkCuratorStarted = curatorConnect.client.isStarted(); System.out.println("当前客户真个状态:" + (isZkCuratorStarted ? "连接中..." : "已*...")); Thread.sleep(1000); // *客户端 curatorConnect.closeZKClient(); // 获取当前客户真个状态 isZkCuratorStarted = curatorConnect.client.isStarted(); System.out.println("当前客户真个状态:" + (isZkCuratorStarted ? "连接中..." : "已*...")); } }

控制台输出信息如下:

当前客户真个状态:连接中... 当前客户真个状态:已*...

curator连接zookeeper处事器时有自动重连机制,而curator的重连计谋有五种。第一种就是我们以上demo中使用到的:

/** * (保举) * 同步创建zk示例,原生api是异步的 * 这一步是设置重连计谋 * * 结构器参数: * curator链接zookeeper的计谋:ExponentialBackoffRetry * baseSleepTimeMs:初始sleep的时间 * maxRetries:最大重试次数 * maxSleepMs:最大重试时间 */ RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5);

第二种,可设定重连n次:

/** * (保举) * curator链接zookeeper的计谋:RetryNTimes * * 结构器参数: * n:重试的次数 * sleepMsBetweenRetries:每次重试间隔的时间 */ RetryPolicy retryPolicy = new RetryNTimes(3, 5000);