0


SpringBoot3集成Zookeeper

一、简介

ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步、提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。

二、环境搭建

1、修改配置文件

  1. # 1、拷贝一份样本配置文件
  2. cp zookeeper-3.8.3/conf/zoo_sample.cfg zookeeper-3.8.3/conf/zoo.cfg
  3. # 2、修改数据文件地址,注意这里用本地路径
  4. dataDir=/local-path/zookeeper-3.8.3/data
  5. # 3、添加一个配置,处理启动日志的提示:ZooKeeper audit is disabled.
  6. audit.enable=true

2、服务启动

  1. # 1、启动服务端
  2. zookeeper-3.8.3/bin/zkServer.sh start
  3. # 2、停止服务端
  4. zookeeper-3.8.3/bin/zkServer.sh stop
  5. # 3、启动客户端
  6. zookeeper-3.8.3/bin/zkCli.sh

3、客户端测几个增删查的命令

  1. [zk: localhost:2181(CONNECTED) 0] create /cicada smile1
  2. Created /cicada
  3. [zk: localhost:2181(CONNECTED) 1] get /cicada
  4. smile1
  5. [zk: localhost:2181(CONNECTED) 2] ls /
  6. [cicada, zookeeper]
  7. [zk: localhost:2181(CONNECTED) 3] delete /cicada

三、工程搭建

1、工程结构

2、依赖管理

Curator是一组Java库,它让ZooKeeper的使用变得更加容易,这里的依赖实际是查询匹配版本的时候走了个捷径,也可以参考

  1. integration-redis

包,熟悉下Spring的封装策略。

  1. <!-- Zookeeper组件 -->
  2. <dependency>
  3. <groupId>org.apache.zookeeper</groupId>
  4. <artifactId>zookeeper</artifactId>
  5. <version>${zookeeper.version}</version>
  6. </dependency>
  7. <!-- 包含Curator组件 -->
  8. <dependency>
  9. <groupId>org.springframework.integration</groupId>
  10. <artifactId>spring-integration-zookeeper</artifactId>
  11. <version>${spring-integration.version}</version>
  12. </dependency>

3、配置文件

配置脚本

  1. zookeeper:
  2. #服务器地址
  3. connectString: 127.0.0.1:2181
  4. #会话超时时间
  5. sessionTimeoutMs: 3000
  6. #连接超时时间
  7. connectionTimeoutMs: 60000
  8. #最大重试次数
  9. maxRetries: 3
  10. #初始休眠时间
  11. baseSleepTimeMs: 1000

配置类

  1. @Configuration
  2. public class ZookeeperConfig {
  3. @Value("${zookeeper.connectString}")
  4. private String connectString;
  5. @Value("${zookeeper.baseSleepTimeMs}")
  6. private int baseSleepTimeMs;
  7. @Value("${zookeeper.maxRetries}")
  8. private int maxRetries ;
  9. @Value("${zookeeper.connectionTimeoutMs}")
  10. int connectionTimeoutMs ;
  11. @Value("${zookeeper.sessionTimeoutMs}")
  12. int sessionTimeoutMs ;
  13. private static CuratorFramework client = null ;
  14. /**
  15. * 初始化
  16. */
  17. @PostConstruct
  18. public void init (){
  19. // 重试策略
  20. RetryPolicy policy = new ExponentialBackoffRetry(baseSleepTimeMs, maxRetries);
  21. // 创建Curator
  22. client = CuratorFrameworkFactory.builder()
  23. .connectString(connectString)
  24. .connectionTimeoutMs(connectionTimeoutMs)
  25. .sessionTimeoutMs(sessionTimeoutMs)
  26. .retryPolicy(policy).build();
  27. //开启连接
  28. client.start();
  29. }
  30. @Bean
  31. public CuratorFramework getClient (){
  32. return client ;
  33. }
  34. }

四、ZooKeeper用法

测试几个API方法,节点创建和添加数据,以及判断和查询数据,还有就是基于ZooKeeper提供的读写锁能力。

  1. public class ConfigTest {
  2. @Autowired
  3. private CuratorFramework client ;
  4. @Test
  5. public void testCreate () throws Exception {
  6. // 创建一个持久化节点,断开连接时不会自动删除
  7. client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/path1");
  8. }
  9. @Test
  10. public void testExists () throws Exception {
  11. // 判断节点是否存在,path2不存在所以stat2是null
  12. Stat stat1 = client.checkExists().forPath("/path1");
  13. System.out.println(stat1);
  14. Stat stat2 = client.checkExists().forPath("/path2");
  15. System.out.println(stat2);
  16. }
  17. @Test
  18. public void testSetData () throws Exception {
  19. // 设置节点数据
  20. client.setData().forPath("/path1", "data1".getBytes(StandardCharsets.UTF_8));
  21. }
  22. @Test
  23. public void testCreateAndSet () throws Exception {
  24. // 创建一个持久化节点并设置节点数据
  25. client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
  26. .forPath("/path3","data3".getBytes(StandardCharsets.UTF_8));
  27. }
  28. @Test
  29. public void testGetData () throws Exception {
  30. // 查询节点数据
  31. byte[] data = client.getData().forPath("/path3");
  32. System.out.println(new String(data,StandardCharsets.UTF_8));
  33. }
  34. @Test
  35. public void testDelete () throws Exception {
  36. // 删除节点
  37. client.delete().guaranteed().deletingChildrenIfNeeded().forPath("/path3");
  38. }
  39. @Test
  40. public void testReadLock () throws Exception {
  41. // 读写锁-读
  42. InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock-read");
  43. lock.readLock().acquire();
  44. System.out.println("获取-ReadLock");
  45. lock.readLock().release();
  46. }
  47. @Test
  48. public void testWriteLock () throws Exception {
  49. // 读写锁-写
  50. InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock-write");
  51. lock.writeLock().acquire();
  52. System.out.println("获取-WriteLock");
  53. lock.writeLock().release();
  54. }
  55. }

本文转载自: https://blog.csdn.net/softshow1026/article/details/135814713
版权归原作者 softshow1026 所有, 如有侵权,请联系我们删除。

“SpringBoot3集成Zookeeper”的评论:

还没有评论