Apache Curator操纵zookeeper的API使用
标签:
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);温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/33425.html