写点什么

SpringBoot3 集成 Zookeeper

作者:知了一笑
  • 2024-01-23
    浙江
  • 本文字数:2536 字

    阅读完需:约 8 分钟

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 smile1Created /cicada[zk: localhost:2181(CONNECTED) 1] get /cicadasmile1[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
复制代码


配置类


@Configurationpublic 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
复制代码


发布于: 刚刚阅读数: 4
用户头像

知了一笑

关注

公众号:知了一笑 2020-04-08 加入

源码仓库:https://gitee.com/cicadasmile

评论

发布
暂无评论
SpringBoot3集成Zookeeper_Java_知了一笑_InfoQ写作社区