没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
28页
4、zookeeper的java三种客户端介绍-Curator(crud、事务操作、监听、分布式计数器、分布式锁) 网址:https://blog.csdn.net/chenwewi520feng/article/details/130288718 zookeeper常用的3种java客户端 zookeeper原生Java API ZkClient Apache curator 本文将按照顺序逐一简单介绍其使用。
资源推荐
资源详情
资源评论
Zookeeper系列文章目录
1、zookeeper3.7.1安装与验证
2、zookeeper基本操作及应用示例(shell、java api、应用场景示例)
3、zookeeper的选举----经验证符合事实,网上很多都是错误的
4、zookeeper的java三种客户端介绍-Curator(crud、事务操作、监听、分布式计数器、分布式锁)
5、zookeeper的java -Curator(服务注册与发现)
@TOC
zookeeper常用的3种java客户端
zookeeper原生Java API
ZkClient
Apache curator
本文将按照顺序逐一简单介绍其使用。
一、zookeeper原生Java API
Zookeeper客户端提供了基本的操作,比如创建会话、创建节点、读取节点、更新数据、删除节点和检
查节点是否存在等。但对于开发人员来说,Zookeeper提供的基本操纵还是有一些不足之处。
Zookeeper API不足之处
(1)Session超时之后没有实现重连机制,需要手动操作;
(2)Watcher注册是一次性的,每次触发之后都需要重新进行注册;
(3)不支持递归创建节点;
(4)异常处理繁琐,Zookeeper提供了很多异常,对于开发人员来说可能根本不知道该如何处理这些异
常信息;
(5)只提供了简单的byte[]数组的接口,没有提供针对对象级别的序列化;
(6)创建节点时如果节点存在抛出异常,需要自行检查节点是否存在;
(7)删除节点无法实现级联删除;
基于以上原因,直接使用Zookeeper原生API的人并不多。
具体使用参见文章zookeeper的基本操作及应用示例中的介绍。
二、ZkClient
ZkClient是一个开源客户端,在Zookeeper原生API接口的基础上进行了包装,更便于开发人员使用。解
决如下问题:
1)session会话超时重连
2)解决Watcher反复注册
3)简化API开发
虽然 ZkClient 对原生 API 进行了封装,但也有它自身的不足之处:
几乎没有参考文档;
异常处理简化(抛出RuntimeException);
重试机制比较难用;
没有提供各种使用场景的实现;
示例欠奉,pom.xml文件增加如下内容:
三、Apache curator
Curator是Netflix公司开源的一套Zookeeper客户端框架,和ZkClient一样,解决了非常底层的细节开发
工作,包括连接重连、反复注册Watcher和NodeExistsException异常等。目前已经成为 Apache 的顶级
项目。
官网:http://curator.apache.org/index.html
Apache Curator是Apache ZooKeeper的Java / JVM客户端库,Apache ZooKeeper是一种分布式协调服
务。它包括一个高级API框架和实用程序,使Apache ZooKeeper更容易和更可靠。它还包括常见用例和
扩展(如服务发现和Java 8异步DSL)的配方。
其特点:
Apache 的开源项目
解决Watch注册一次就会失效的问题
提供一套Fluent风格的 API 更加简单易用
提供更多解决方案并且实现简单,例如:分布式锁
提供常用的ZooKeeper工具类
编程风格更舒服
除此之外,Curator中还提供了Zookeeper各种应用场景(Recipe,如共享锁服务、Master选举机制和
分布式计算器等)的抽象封装。
Curator项目组件
<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
组件的Maven依赖
源码地址:https://github.com/apache/curator
如果只想使用Curator操作Zookeeper增删改查,则使用curator-client包及curator-framework包。
zookeeper的版本是3.7.1
1、pom.xml
2、定义常量类
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-client -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>5.3.0</version>
</dependency>
import org.apache.curator.retry.ExponentialBackoffRetry;
/**
* @author alanchan
*
*/
public class Constant {
// 会话超时时间 10000
public final static int SESSION_TIMEOUT = 10 * 1000;
// 连接超时时间 50000
public final static int CONNECTION_TIMEOUT = 50 * 1000;
// ZooKeeper服务地址
public static String zkServerAddress =
"192.168.10.41:2118,192.168.10.42:2118,192.168.10.43:2118";
// 1 重试策略:初试时间为1s 重试3次
public static ExponentialBackoffRetry retryPolicy = new
ExponentialBackoffRetry(1000, 3);
}
3、连接实例化
import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.utils.CloseableUtils;
import org.apache.zookeeper.ZooKeeper.States;
public class App {
public static void main(String[] args) {
// 例子1
// test1();
// 例子2
// CuratorFramework zkClient = createSimple(zkServerAddress);
// zkClient.start();
// 例子3
ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000,
3);
CuratorFramework zkClient = createWithOptions(Constant.zkServerAddress,
retryPolicy, 5000, 3000);
zkClient.start();
System.out.println(States.CONNECTED);
System.out.println(zkClient.getState());
}
public static void test1() {
// * @param baseSleepTimeMs initial amount of time to wait between retries 初
始重试等待时间
// * @param maxRetries max number of times to retry 最大重试次数
// * @param maxSleepMs max time in ms to sleep on each retry 最大重试等待时间
ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000,
3, 5000);
CuratorFramework zkClient =
CuratorFrameworkFactory.builder().connectString(Constant.zkServerAddress)
.sessionTimeoutMs(3000).connectionTimeoutMs(5000).retryPolicy(retryPolicy).build
();
// 很重要 一定要调用start来创建session链接
zkClient.start();
CloseableUtils.closeQuietly(zkClient);
}
public static CuratorFramework createSimple(String connectionString) {
// these are reasonable arguments for the ExponentialBackoffRetry. The
first
4、事务操作示例
// retry will wait 1 second - the second will wait up to 2 seconds - the
// third will wait up to 4 seconds.
ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000,
3);
// The simplest way to get a CuratorFramework instance. This will use
default
// values.
// The only required arguments are the connection string and the retry
policy
return CuratorFrameworkFactory.newClient(connectionString, retryPolicy);
}
// int connectionTimeoutMs 50000
// int sessionTimeoutMs 10000
//连接时间要大于会话时间,如果设置不当,会出现 KeeperErrorCode = ConnectionLoss异常
public static CuratorFramework createWithOptions(String connectionString,
RetryPolicy retryPolicy,
int connectionTimeoutMs, int sessionTimeoutMs) {
// using the CuratorFrameworkFactory.builder() gives fine grained
control
// over creation options. See the CuratorFrameworkFactory.Builder
javadoc
// details
return
CuratorFrameworkFactory.builder().connectString(connectionString).retryPolicy(re
tryPolicy)
.connectionTimeoutMs(connectionTimeoutMs).sessionTimeoutMs(sessionTimeoutMs)
// etc. etc.
.build();
}
}
import java.util.Collection;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.api.transaction.CuratorOp;
import org.apache.curator.framework.api.transaction.CuratorTransactionResult;
import org.zookeeper_curator.App;
import org.zookeeper_curator.Constant;
/**
* @author alanchan Curator 事务管理 操作
*/
public class TransactionExamples {
public static void main(String[] args) throws Exception {
transaction(getCuratorFramework());
剩余27页未读,继续阅读
资源评论
一瓢一瓢的饮alanchanchn
- 粉丝: 2873
- 资源: 69
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功