zookeeper Linux单机安装与springboot集成基本使用增删改查
2021/11/27 7:11:55
本文主要是介绍zookeeper Linux单机安装与springboot集成基本使用增删改查,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、Linux单机安装Zookeeper
首先我们下载zookeeper官网下载即可 我的3.5.6版本 (自取) 只想看springboot集成的同学略过直接看二
链接:https://pan.baidu.com/s/1HnBsSz_AP6P_vEIqe5wlBQ
提取码:qzsv
-
上传至Linux服务器 使用命令 tar -zxvf 包名 进行解压
-
进入文件夹 首先我们将配置文件拷贝一份 进入conf目录下 cp zoo_sample.cfg zoo.cfg
-
编辑zoo.cfg 配置文件 vi zoo.cfg 开放端口 设置dataDir与dataLogDir两个文件存储路径 然后保存退出
-
输入 bin/zkServer.sh start 启动zookeeper
-
启动完成后输入 jps可查看进程是否存在
-
输入bin/zkCli.sh 即可进入zookeeper
这里我们可以输入 一些简单操作命令 进行操作 详细内容可以网上搜索这里不一一介绍 (操作如下图所示) ls / //查看根目录所有节点 create /testNode 我是测试内容 //create创建节点 get /testNode //获取节点信息 set /testNode 我是更新后的测试数据
二、Springboot集成操作节点增删改查
直接上代码
//pom依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> //appication.properties 配置文件 # 项目配置端口 server.port=9809 # zookeeper ip 端口 zookeeper.address=ip:2181 #连接超时 zookeeper.address.timeout=4000
configuration配置类 代码是直接可以跑的 跑不通的同学就是引入依赖问题 可以仔细查看import
//configuration 配置类 import com.example.demoalgorithm.controller.ZookeeperTest; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.CountDownLatch; @Configuration public class ZookeeperConfig { @Value("${zookeeper.address}") private String connectString; @Value(("${zookeeper.address.timeout}")) private int timeout; @Bean(name = "zkClient") public ZooKeeper zkClient(){ ZooKeeper zooKeeper=null; try { final CountDownLatch countDownLatch = new CountDownLatch(1); zooKeeper = new ZooKeeper(connectString, timeout, new Watcher() { @Override public void process(WatchedEvent event) { if(Event.KeeperState.SyncConnected==event.getState()){ countDownLatch.countDown(); } } }); countDownLatch.await(); System.out.println(zooKeeper.getState()+"ZooKeeper状态"); logger.info("ZooKeeper连接状态={}",zooKeeper.getState()); }catch (Exception e){ logger.error("初始化ZooKeeper异常={}",e); } return zooKeeper; } }
添加完配置代理类直接进行zookeeper连接测试
import com.example.demoalgorithm.config.ZkApi; import org.apache.zookeeper.*; import org.apache.zookeeper.data.ACL; import org.apache.zookeeper.data.Stat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.text.MessageFormat; import java.util.List; import java.util.concurrent.CountDownLatch; import static org.apache.zookeeper.ZooDefs.OpCode.exists; @RestController public class ZookeeperTest { private static final Logger logger = LoggerFactory.getLogger(ZookeeperTest.class); @Autowired private ZooKeeper zkClient; // 查询节点是否存在 参数:节点路径 例如 /testNode @GetMapping("selectNode") public void selectNode(String path){ try { logger.info("[开始查询节点Stat]"); Stat exists = zkClient.exists(path, true); logger.info("[查询成功]",exists.getVersion()); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } //查询节点数据 此方法返回节点内数据 参数:节点路径 例如 /testNode @GetMapping("queryData") public String queryData(String nodePath) throws KeeperException, InterruptedException{ Stat stat = zkClient.exists(nodePath, false); logger.info("准备查询节点Stat,path:{}",nodePath); //data 为节点内数据 String data = new String(zkClient.getData(nodePath, false, stat)); logger.info("结束查询节点Stat,data:{}", data); return data; } //此方法为创建节点 参数:节点路径 节点数据 例如:/testNode 测试数据 @GetMapping("/createNode") public void create(String nodePath,String nodeData) throws KeeperException, InterruptedException{ logger.info("开始创建节点:{},数据:{}",nodePath,nodeData); List<ACL> acl = ZooDefs.Ids.OPEN_ACL_UNSAFE; CreateMode createMode = CreateMode.PERSISTENT; // result 节点名 String result = zkClient.create(nodePath, nodeData.getBytes(), acl, createMode); logger.info("创建节点返回结果:{}",result); logger.info("完成创建节点:{}, 数据:{}",nodePath,nodeData); } // 修改接口 @GetMapping("updateNode") public Stat update(String nodePath,String nodeData) throws KeeperException, InterruptedException{ Stat stat = zkClient.exists(nodePath, false); logger.info("准备修改节点,path:{},data:{},version:{}",nodePath,nodeData,stat.getVersion()); Stat newStat = zkClient.setData(nodePath, nodeData.getBytes(), stat.getVersion()); logger.info("修改节点完成,path:{},data:{},version:{}",nodePath,nodeData,stat.getVersion()); return stat; } //删除接口 @GetMapping("deleteNode") public String delete(String nodePath) throws InterruptedException, KeeperException{ //删除节点前先查询该节点信息 Stat stat = zkClient.exists(nodePath, false); logger.info("准备删除节点,path:{},原version:{}",nodePath, stat.getVersion()); zkClient.delete(nodePath, stat.getVersion()); logger.info("完成删除节点,path:{0}",nodePath); return "success"; } }
这篇关于zookeeper Linux单机安装与springboot集成基本使用增删改查的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)