SpringBoot3集成Zookeeper
标签:Zookeeper3.8 ,Curator5.5;
一、简介
ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步、提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。
二、环境搭建
1、修改配置文件
# 1、拷贝一份样本配置文件
cp zookeeper-3.8.3/conf/zoo_sample.cfg zookeeper-3.8.3/conf/zoo.cfg
# 2、修改数据文件地址,注意这里用本地路径
dataDir=/local-path/zookeeper-3.8.3/data
# 3、添加一个配置,处理启动日志的提示:ZooKeeper audit is disabled.
audit.enable=true
2、服务启动
# 1、启动服务端
zookeeper-3.8.3/bin/zkServer.sh start
# 2、停止服务端
zookeeper-3.8.3/bin/zkServer.sh stop
# 3、启动客户端
zookeeper-3.8.3/bin/zkCli.sh
3、客户端测几个增删查的命令
[zk: localhost:2181(CONNECTED) 0] create /cicada smile1
Created /cicada
[zk: localhost:2181(CONNECTED) 1] get /cicada
smile1
[zk: localhost:2181(CONNECTED) 2] ls /
[cicada, zookeeper]
[zk: localhost:2181(CONNECTED) 3] delete /cicada
三、工程搭建
1、工程结构

2、依赖管理
Curator是一组Java库,它让ZooKeeper的使用变得更加容易,这里的依赖实际是查询匹配版本的时候走了个捷径,也可以参考integration-redis包,熟悉下Spring的封装策略。
<!-- Zookeeper组件 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<!-- 包含Curator组件 -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-zookeeper</artifactId>
<version>${spring-integration.version}</version>
</dependency>
3、配置文件
配置脚本
zookeeper:
#服务器地址
connectString: 127.0.0.1:2181
#会话超时时间
sessionTimeoutMs: 3000
#连接超时时间
connectionTimeoutMs: 60000
#最大重试次数
maxRetries: 3
#初始休眠时间
baseSleepTimeMs: 1000
配置类
@Configuration
public class ZookeeperConfig {
@Value("${zookeeper.connectString}")
private String connectString;
@Value("${zookeeper.baseSleepTimeMs}")
private int baseSleepTimeMs;
@Value("${zookeeper.maxRetries}")
private int maxRetries ;
@Value("${zookeeper.connectionTimeoutMs}")
int connectionTimeoutMs ;
@Value("${zookeeper.sessionTimeoutMs}")
int sessionTimeoutMs ;
private static CuratorFramework client = null ;
/**
* 初始化
*/
@PostConstruct
public void init (){
// 重试策略
RetryPolicy policy = new ExponentialBackoffRetry(baseSleepTimeMs, maxRetries);
// 创建Curator
client = CuratorFrameworkFactory.builder()
.connectString(connectString)
.connectionTimeoutMs(connectionTimeoutMs)
.sessionTimeoutMs(sessionTimeoutMs)
.retryPolicy(policy).build();
//开启连接
client.start();
}
@Bean
public CuratorFramework getClient (){
return client ;
}
}
四、ZooKeeper用法
测试几个API方法,节点创建和添加数据,以及判断和查询数据,还有就是基于ZooKeeper提供的读写锁能力。
public class ConfigTest {
@Autowired
private CuratorFramework client ;
@Test
public void testCreate () throws Exception {
// 创建一个持久化节点,断开连接时不会自动删除
client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/path1");
}
@Test
public void testExists () throws Exception {
// 判断节点是否存在,path2不存在所以stat2是null
Stat stat1 = client.checkExists().forPath("/path1");
System.out.println(stat1);
Stat stat2 = client.checkExists().forPath("/path2");
System.out.println(stat2);
}
@Test
public void testSetData () throws Exception {
// 设置节点数据
client.setData().forPath("/path1", "data1".getBytes(StandardCharsets.UTF_8));
}
@Test
public void testCreateAndSet () throws Exception {
// 创建一个持久化节点并设置节点数据
client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
.forPath("/path3","data3".getBytes(StandardCharsets.UTF_8));
}
@Test
public void testGetData () throws Exception {
// 查询节点数据
byte[] data = client.getData().forPath("/path3");
System.out.println(new String(data,StandardCharsets.UTF_8));
}
@Test
public void testDelete () throws Exception {
// 删除节点
client.delete().guaranteed().deletingChildrenIfNeeded().forPath("/path3");
}
@Test
public void testReadLock () throws Exception {
// 读写锁-读
InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock-read");
lock.readLock().acquire();
System.out.println("获取-ReadLock");
lock.readLock().release();
}
@Test
public void testWriteLock () throws Exception {
// 读写锁-写
InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock-write");
lock.writeLock().acquire();
System.out.println("获取-WriteLock");
lock.writeLock().release();
}
}
五、参考源码
文档仓库:
https://gitee.com/cicadasmile/butte-java-note
源码仓库:
https://gitee.com/cicadasmile/butte-spring-parent
SpringBoot3集成Zookeeper的更多相关文章
- spring boot 集成 zookeeper 搭建微服务架构
PRC原理 RPC 远程过程调用(Remote Procedure Call) 一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远程系统资源,R ...
- springcloud集成zookeeper,并使用configserver作为服务的配置中心
1.springcloud集成zookeeper: 做法: 出现问题: 版本不一致导致出现keepError: 解决:服务器的zookeeper要与客户端的zookeeper一致,才可以. 2.使用c ...
- Spring Boot 知识笔记(集成zookeeper)
一.本机搭建zookeeper伪集群 1.下载安装包,复制三份 2.每个安装包目录下面新建一个data文件夹,用于存放数据目录 3.安装包的conf目录下,修改zoo.cfg配置文件 # The nu ...
- HBase集成Zookeeper集群部署
大数据集群为了保证故障转移,一般通过zookeeper来整体协调管理,当节点数大于等于6个时推荐使用,接下来描述一下Hbase集群部署在zookeeper上的过程: 安装Hbase之前首先系统应该做通 ...
- springcloud的turbine集成zookeeper
1.turbine监控界面显示一直是loading的状态,如何解决 http://blog.didispace.com/spring-cloud-tips-4/ 2.通过追踪turbine的依赖可以看 ...
- dubbo集成zookeeper rpc远程调用
注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...
- Dubbo集成Spring与Zookeeper实例
>>Dubbo最佳实践 使用Dubbo结合Zookeeper和Spring,是使用比较广泛的一种组合,下面参考官方文档,做个简单的示例,一步步搭建一个使用dubbo结合Zookeeper和 ...
- ZooKeeper配置管理文件
最近在工作中,为了完善公司集群服务的架构,提高可用性,降低运维成本,因此开始学习ZooKeeper. 至于什么是ZooKeeper?它能做什么?如何安装ZooKeeper?我就不一一介绍了,类似 ...
- Solr+Tomcat+zookeeper部署实战
一 .安装solr 环境说明:centos 7.3,solr 6.6,zookeeper3.4,Tomcat8.5,jdk1.8 zookeeper的部署请参考:http://www.cnblogs. ...
- Zookeeper系列1 快速入门
Zookeeper的简介这里我就不说了,在接下来的几篇文章会涉及zookeeper环境搭建,watcher以及相关配置说明, 三种操作zookeeper的方式(原生API方式,zkclient,Cur ...
随机推荐
- ElasticSearch之cat indices API
命令样例如下: curl -X GET "https://localhost:9200/_cat/indices?v=true&pretty" --cacert $ES_H ...
- Pikachu漏洞靶场 PHP反序列化
PHP反序列化 查看源码,以下为关键代码: class S{ var $test = "pikachu"; function __construct(){ echo $this-& ...
- electron入门之创建新窗口remote(一)
electron入门到入土,从渲染线程中创建新窗口.2022-03-21入门版本17.1.2 electron重要概念,只有一个主线程,其他都是渲染进程或者叫子线程,他们不能直接相互操作,可以通过ip ...
- vuepress借助jenkins和svn实现文档自动化更新部署
前言 有个需求,需要将放在SVN的用vuepress写的文档进行自动化更新和部署,每次有人在本地将写好的md文件更新到svn时候,由jenkins实现自动打包来实现自动更新的功能. docker安装j ...
- JavaImprove--Lesson03--String的工具类,Math,Runtime,BigDecimal,Date
一String的工具类 String的作为字符串对象,也是使用最多的数据类型对象 所以难免有很多操作,字符串的常见操作包括:字符串拼接,字符串反转,字符串长度,字符串转换等 直接使用String类型来 ...
- Vue接入谷歌广告(Google Adsense)
1.注册账户 首先你要拥有一个google账号,点击注册谷歌账号,点击个人账号根据提示一步一步来即可注册成功.(当然你需要魔法才可以正常访问谷歌服务) 2.补充账户信息,申请广告授权 点击进入Goog ...
- spring-cloud-alibaba项目打包
在父依赖中加入 <build> <plugins> <plugin> <groupId>org.springframework.boot</gro ...
- MySQL系列:索引(B+Tree树、构建过程、回表、基本操作、执行计划、应用)
介绍 https://dev.mysql.com/doc/refman/5.7/en/optimization-indexes.html 作用 优化查询 算法 索引的算法包括 BTree Hash R ...
- C++通过文件指针获取文件大小
目录 1. 叙述 2. 结论 1. 叙述 对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取.网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计算出文件的大小.但是我总觉得这样做可 ...
- Java 编辑、删除Excel中的超链接
本文介绍如何编辑Excel文档中的超链接,包括编辑超链接显示文本.链接地址及删除指定超链接.使用免费版Excel类库工具,Free Spire.XLS for Java.Jar包获取可在官方网站下载, ...