二、curator入门
简介
curator是Apache下开源的项目,它包含了zookeeper的客户端高层级API的实现,并提供了一些常见的用例实现方便我们直接使用。简单来说,使用curator作为zookeeper客户端能够使我们更加简单且可靠地在我们的程序中使用zookeeper。
curator官网:http://curator.apache.org/
JavaDoc:http://curator.apache.org/apidocs/index.html
依赖
它主要包含三个依赖(curator的依赖都已经放到maven仓库,你直接使用maven来构建它。对于大多数人来说,我们可能最常需要引入的是curator-recipes):
1)curator-recipes:包含了curator实现的各项功能,如读写锁、互斥锁、队列等,依赖于framework和Client:http://curator.apache.org/curator-recipes/index.html
2)curator-framework:包含了高层级的流式API,构建在Client之上如对节点的增删改查等:http://curator.apache.org/curator-framework/index.html
3)curator-client:zookeeper的基础客户端实现,如连接、重试、超时处理等:http://curator.apache.org/curator-client/index.html
下面示例我们将看到如何使用curator连接zookeeper并进行CRUD操作,这不需要recipes,只需要client和framework即可。使用maven的话,引入framework的时候会自动引入Client,因此,我们将直接引入framework。
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
兼容性
zookeeper 3.4.x版本和3.5.x版本已经被大量的使用在了生产环境中,即使截止到18年5月3.5.x还处于beta版本中。
在curator4.0之前,对于3.4.x和3.5.x的兼容需要引入两个不同的版本来对应,分别是:
1)curator 2.x.x -> zookeeper 3.4.x 和 3.5.x
2)curator 3.x.x -> zookeeper 3.5.x
而在curator4.0以后,可以同时兼容这两种版本。但是你需要排除zookeeper的客户端依赖包,如:
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
并,引入你需要的zookeeper依赖包版本,比如引入3.4.6:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
curator会自动兼容你引入的zookeeper依赖,并根据你引入的依赖来决定采用哪一种模式。
增删改查
CuratorFramework对外提供基本的流式API操作,需要通过CuratorFrameworkFactory来连接zookeeper,并build一个实例对象。
在使用API操作之前,你需要调用start()方法,操作结束以后需要调用close()方法结束。不过CuratorFramework是线程安全的,所以你可以采用单例的形式去使用它而不用频繁地创建、开始、关闭等。
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry; public class CuratorDemo { public static void main(String[] args) throws Exception {
// 连接zookeeper到本地的2181端口,并设置重试策略为3秒一次,最多3次重试
CuratorFramework client = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181").retryPolicy(new ExponentialBackoffRetry(3000, 3)).build();
System.out.println("启动");
client.start();
System.out.println("创建节点");
// 创建
client.create().forPath("/user", "lay".getBytes());
System.out.println("查询节点");
// 查看
byte[] result = client.getData().forPath("/user");
System.out.println(new String(result));
System.out.println("更新节点");
// 更新
client.setData().forPath("/user", "marry".getBytes());
result = client.getData().forPath("/user");
System.out.println(new String(result));
System.out.println("删除节点");
// 删除
client.delete().forPath("/user");
// 判断节点存在
System.out.println("isExsits: " + client.checkExists().forPath("/user") != null);;
System.out.println("关闭");
client.close();
}
}
使用curator必须先调用start()方法,当你不需要使用的时候需要调用close()去关闭。
二、curator入门的更多相关文章
- XML学习总结(二)——XML入门
XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...
- Apache Curator入门实战
Apache Curator入门实战 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeep ...
- 基于tensorflow的MNIST手写数字识别(二)--入门篇
http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...
- 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权
原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...
- 深入浅出 JMS(二) - ActiveMQ 入门指南
深入浅出 JMS(二) - ActiveMQ 入门指南 上篇博文深入浅出 JMS(一) – JMS 基本概念,我们介绍了消息通信的规范JMS,这篇博文介绍一款开源的 JMS 具体实现-- Active ...
- tensorflow学习笔记二:入门基础 好教程 可用
http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础 TensorFlow用张量这种数据结构来表示所有的数据.用一 ...
- SpringBoot系列(二)入门知识
SpringBoot系列(二)入门知识 往期推荐 SpringBoot系列(一)idea新建springboot项目 引言 本来新建springboot项目应该放在入门知识这一章的,但是由于新建spr ...
- Azure Key Vault(二)- 入门简介
一,引言 在介绍 Azure Key Vault 之前,先简单介绍一下 HSM(硬件安全模块). -------------------- 我是分割线 -------------------- 1,什 ...
随机推荐
- J - Judge(快速幂)(同余定理)
J - Judge Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit S ...
- leecode刷题(18)-- 报数
leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...
- java爬虫中jsoup的使用
jsoup可以用来解析HTML的内容,其功能非常强大,它可以向javascript那样直接从网页中提取有用的信息 例如1: 从html字符串中解析数据 //直接从字符串中获取 public stati ...
- 阿里巴巴前端面试分享-社招(p6)
借鉴了朋友的阿里面试经:(社招前端2年经验) 电话面 简单自我介绍, 做过哪些项目, 使用哪些技术栈 ? 如何看待前端框架选型 ? vue的如何实现双向绑定的 ? react 虚拟DOM 是什么? 如 ...
- 杨辉三角-python
# -*- coding: utf-8 -*- def triangles(): yield [1] # n = 0 第一行 yield [1, 1] # n = 1 第二行 b, n, old = ...
- springcloud(九)-Feign使用Hystrix
前言 上一篇我们使用注解@HystrixCommond的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的,它没有方法体,上一篇讲解的方式显然不适用于Feign. 那么Fei ...
- Q72 编辑距离
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输 ...
- How to deal with the problem '<' in OpenERP's view file
In this case,if you write some stirng in your fields which contains '<' , OpenERP will give a err ...
- Java 8学习之Lambda表达式
一.lambda表达式 一个lambda表达式包含三个部分: 一段代码 参数 自由变量的值,这里的自由指的是哪些不是参数并且没有在代码中定义的变量. 示例: public static void re ...
- redis 实现消息发布和订阅
1,打开二个客户端机器 一个用于发布,一个用于接受 2,发布一个channel1 3,用另外一个客户端收听上面的客户端 4,当再次在发布的redis客户端 发布一个消息 其他所有订阅的客户端会自动收 ...