Zookeeper工具类代码

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 这篇记录连接和操作Zookeeper的工具类,方便以后创建项目时可以直接CV。

  这篇记录连接和操作Zookeeper的工具类,方便以后创建项目时可以直接CV。

       其实和以前安装那篇文章学过的用原生API连接一个东西,不过这个更全面一些,不止是连接,还有关闭、创建节点、更改节点、查询节点等等功能。

直接上代码:

一、依赖

<!--https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.6.3</version></dependency>

二、工具类

packagecom.xing.studyboot.component.zookeeper;
importjava.io.IOException;
importjava.util.List;
importorg.apache.zookeeper.CreateMode;
importorg.apache.zookeeper.KeeperException;
importorg.apache.zookeeper.WatchedEvent;
importorg.apache.zookeeper.Watcher;
importorg.apache.zookeeper.ZooDefs.Ids;
importorg.apache.zookeeper.ZooKeeper;
importorg.apache.zookeeper.data.Stat;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
/*** zookeeper 工具类* @author abel**/publicclassZookeeperUtil {
privatestaticfinalLoggerlog=LoggerFactory.getLogger(ZookeeperUtil.class);
privatestaticZooKeeperzk=null;
/***  连接到zookeeper* @param zkHost 地址 127.0.0.1:2181* @param timeOut 超时时间。 单位:毫秒* @throws Exception */publicstaticvoidcreateConnection(StringzkHost, inttimeOut) {
try {
zk=newZooKeeper(zkHost, timeOut, newWatcher() {
// 监控所有被触发的事件publicvoidprocess(WatchedEventevent) {
System.out.println("连接成功,已经触发了"+event.getType() +"事件!");
                }
            });
        } catch (IOExceptione) {
log.error("zookeeper连接{}时异常,{}",zkHost,e);
        }
    }
/*** 关闭连接*/publicstaticbooleancloseConnection() {
try {
zk.close();
log.debug("关闭连接");
returntrue;
        } catch (InterruptedExceptione) {
e.printStackTrace();
returnfalse;
        }
    }
/*** 判断当前路径节点是否存在* @param nodePath 节点路径* @param watch 指定是否复用zookeeper中默认的Watcher。 值: true\false* @return Stat为zookeeper的一个对象,如果是空则说明不存在*/publicstaticStatisExists(StringnodePath,booleanwatch) {
Statstat=null;
try {
stat=zk.exists(nodePath, watch);
        } catch (Exceptione) {
log.error("判断节点{}是否存在异常,{}",nodePath,e);
        }
returnstat;
    }
/***  检测结点是否存在 并设置监听事件  * @param path* @param watcher  传入指定的三种监听类型: 创建,删除,更新* @return*/publicStatexists(Stringpath,Watcherwatcher){
Statstat=null;
try {
returnzk.exists(path,watcher);
        } catch (Exceptione) {
log.error("判断节点{}是否存在异常,{}",path,e);
        }
returnstat;
    }
/*** 创建节点和创建子节点的区别在于nodePath 创建节点 nodePath 为 "/nodeFather" 创建其子节点时 nodePath为"/nodeFather/nodeSon"*  1.CreateMode 取值   *  PERSISTENT:持久化,这个目录节点存储的数据不会丢失 *  PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已经存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名; *  EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session过期超时,这种节点会被自动删除 *  EPHEMERAL_SEQUENTIAL:临时自动编号节点 * @param nodePath* @param nodeData*/publicstaticbooleancreatNode(StringnodePath, StringnodeData) {
booleanres=true;
try {
zk.create(nodePath, nodeData.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
log.debug("创建节点{}成功,节点内容为:{}",nodePath,nodeData);
        } catch (KeeperExceptione) {
log.error("创建节点{}已经存在{}",nodePath,e);
res=false;
        } catch (InterruptedExceptione) {
log.error("节点{}创建失败{}",nodePath,e);
res=false;
        }
returnres;
    }
/*** 修改持久化节点* @param path 可以是子节点也可以是父节点路径* @param data 修改后的数据*/publicstaticbooleanupdateNode(Stringpath, StringmodifyNodeData){
try {
//zk的数据版本是从0开始计数的。如果客户端传入的是-1,则表示zk服务器需要基于最新的数据进行更新。如果对zk的数据节点的更新操作没有原子性要求则可以使用-1.//version参数指定要更新的数据的版本, 如果version和真实的版本不同, 更新操作将失败. 指定version为-1则忽略版本检查zk.setData(path, modifyNodeData.getBytes(), -1);
log.debug("更新节点"+path+"的数据为"+modifyNodeData);
returntrue;
        } catch (Exceptione) {
log.error("【修改持久化节点异常】{},{},{}",path,modifyNodeData,e);
returnfalse;
        }
    }
/*** 删除持久化节点* @param path 删除节点的路径,可以是父节点也可以是子节点*/publicstaticbooleandeleteNode(Stringpath){
try {
//version参数指定要更新的数据的版本, 如果version和真实的版本不同, 更新操作将失败. 指定version为-1则忽略版本检查zk.delete(path,-1);
log.debug("删除"+path+"节点成功");
returntrue;
        } catch (Exceptione) {
log.error("【删除持久化节点异常】{},{}",path,e);
returnfalse;
        }
    }
/*** 获取当前节点的子节点(不包含孙子节点)* @param path 父节点path*/publicstaticList<String>getChildren(Stringpath) throwsKeeperException, InterruptedException{
log.debug("获取节点{}的子节点",path);
returnzk.getChildren(path, false);
   }
/*** 获取指定节点的值* @param path 节点* @param watcher * @param* @return*/publicstaticStringgetNodeData(StringnodePath,Watcherwatcher){
try {
Stringstr=newString(zk.getData(nodePath, watcher, newStat()));
log.debug("节点{}内容为{}",nodePath,str);
returnstr;
       }catch (Exceptione){
log.error("【删除持久化节点异常】{},{}",nodePath,e);
return"";
       }
   }
/*** main测试使用* * @param args*/publicstaticvoidmain(String[] args) {
StringnodePath="/xing";
StringsonNodePath="/xing/son";
StringzkHost="localhost:2181";
inttimeOut=1000;
try {
createConnection(zkHost, timeOut);//创建连接creatNode(nodePath, "创建了一个节点");//创建节点getNodeData(nodePath,null);
if(isExists(nodePath,true)!=null){
System.out.println(nodePath+"节点存在");
           }else{
System.out.println(nodePath+"节点不存在");
           }
updateNode(nodePath, "我是父节点,updateNode一下");
creatNode(sonNodePath, "创建一个子节点");
getNodeData(sonNodePath,null);
getChildren(nodePath);
updateNode(sonNodePath, "我是子节点,updateNode一下");
deleteNode(sonNodePath);
deleteNode(nodePath);
closeConnection();
       } catch (Exceptione) {
e.printStackTrace();
       }
   }
}

总结:

       这是一个包含了连接关闭、增删改查等操作API的Zookeeper工具类。


END

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
12月前
|
Java Nacos
在MSE微服务引擎中,可以使用Java代码进行Nacos下线操作
在MSE微服务引擎中,可以使用Java代码进行Nacos下线操作
185 3
|
机器学习/深度学习 传感器 算法
【图像重建】基于离散余弦变换DCT图像重建含MSE、PSNR、压缩比附matlab代码
【图像重建】基于离散余弦变换DCT图像重建含MSE、PSNR、压缩比附matlab代码
|
JSON 网络协议 Shell
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 2
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
253 0
|
网络协议 Linux 测试技术
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 1
Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
175 0
|
消息中间件 运维 数据可视化
【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
基于Windows系统下的Kafka环境搭建;以及使用.NET 6环境进行开发简单的生产者与消费者的演示。
498 0
【Kafka】基于Windows环境的Kafka有关环境(scala+zookeeper+kafka+可视化工具)搭建、以及使用.NET环境开发的案例代码与演示
|
存储 Java Linux
【ZooKeeper】③ Java 代码使用 ZooKeeper
ZooKeeper 中的 get 命令可查看节点中存储的数据,并绑定【节点数据改变事件】(是一次性事件) ZooKeeper 中的 list 命令可查看子节点列表,并绑定【节点改变事件】(是一次性事件)
92 0
【ZooKeeper】③ Java 代码使用 ZooKeeper
|
API 计算机视觉
Java--Zookeeper工具类代码
这篇记录连接和操作Zookeeper的工具类,方便以后创建项目时可以直接CV。
172 0
|
9天前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
9天前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
下一篇
无影云桌面