Zookeeper分布式锁实例操作
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要讲解了"Zookeeper分布式锁实例操作",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Zookeeper分布式锁实例操作"吧!/** *
千家信息网最后更新 2025年12月01日Zookeeper分布式锁实例操作
这篇文章主要讲解了"Zookeeper分布式锁实例操作",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Zookeeper分布式锁实例操作"吧!
/** * 包名:com.lencee.demo.zookeeper.locks * 文件名:LockClient.java * 版本信息: * 日期:2015年1月23日-下午4:49:48 * */package com.lencee.demo.zookeeper.locks;import java.util.Collections;import java.util.List;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.data.Stat;/** * *TODO:类名称
*
TODO:描述本类实现的功能作用,若为接口应该声明调用地址
* @version 2015年1月23日 下午4:49:48 * */public class LockClient { // Zookeeper集群服务地址与端口 private static String zkUrl = "192.168.0.101:11001"; // 配置结点根路径 private final static String ROOT_LOCK = "/lock"; private final static String WAIT_LOCK = "/lockwait"; private final static String SELF_PATH = "/client"; private final static String SELF_DATA = "/client"; private ZooKeeper zk = null; private boolean iswait = true; //锁路径 private String lockPath; //等待路径 private String selfWaitPath; //监听前置锁路径 private String waitPath; public LockClient(){ try { ZooKeeper zk = new ZooKeeper(zkUrl,3000,new Watcher(){ @Override public void process(WatchedEvent event) { try { if(event.getType()==EventType.NodeDeleted){ System.out.println(event.getPath()+":"+waitPath); getLock(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}); while (zk.getState() != ZooKeeper.States.CONNECTED) { //System.out.println("connecting:"+zk.getState()); Thread.sleep(3000); } this.zk = zk; //创建根结点 String rootValue = "分布式锁"; if(zk.exists(ROOT_LOCK, true)==null){ zk.create(ROOT_LOCK, rootValue.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); } if(zk.exists(WAIT_LOCK, true)==null){ zk.create(WAIT_LOCK, rootValue.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT); } //在锁结点上增加子结点 this.lockPath = addNode(ROOT_LOCK+SELF_PATH,SELF_DATA.getBytes(),CreateMode.EPHEMERAL_SEQUENTIAL); //在等待结点上增加子结点 this.selfWaitPath = WAIT_LOCK+this.lockPath.substring(ROOT_LOCK.length()); addNode(this.selfWaitPath,SELF_DATA.getBytes(),CreateMode.EPHEMERAL); System.out.println("lockpath:"+this.lockPath); System.out.println("selfWaitPath:"+this.selfWaitPath); System.out.println("waitPath:"+this.waitPath); } catch (Exception e) { e.printStackTrace(); } } public void getLock() throws Exception { //检查本线程是否取到锁 Listlist = zk.getChildren(ROOT_LOCK, false); Collections.sort(list); for(String child:list){ System.out.println(child); } String lookfor = this.lockPath.substring(ROOT_LOCK.length()+1); System.out.println(lookfor); int index = list.indexOf(lookfor); if(index==-1){ System.out.println("NND,别坑我"); }else if(index==0){ //获取到锁 System.out.println("do something..."); //删除锁队列 //zk.delete(this.lockPath, -1); //删除等待队列 //zk.delete(this.selfWaitPath, -1); this.iswait = false; }else{ //未取到锁,侦听前一个节点 String waitLockPath = list.get(index-1); this.waitPath = WAIT_LOCK+"/"+waitLockPath; zk.getData(this.waitPath, true, new Stat()); System.out.println("没取到锁,侦听"+this.waitPath); } } public String addNode(String path,byte[] data,CreateMode createMode) throws Exception{ String nodePath = null; if(!path.startsWith("/")){ throw new Exception("传入的路径没有以'/'开始"); } if(this.zk.exists(path, true)==null){ //结点不存在 nodePath = this.zk.create(path, data, Ids.OPEN_ACL_UNSAFE, createMode); } return nodePath; } /** * iswait * * @return the iswait * @since 1.0.0 */ public boolean isIswait() { return iswait; } /** * @param iswait the iswait to set */ public void setIswait(boolean iswait) { this.iswait = iswait; } public static void main(String[] args) throws Exception { LockClient lc = new LockClient(); System.out.println("初始化结束。。。。。"); Thread.sleep(20*1000); lc.getLock(); while(lc.isIswait()); }}
感谢各位的阅读,以上就是"Zookeeper分布式锁实例操作"的内容了,经过本文的学习后,相信大家对Zookeeper分布式锁实例操作这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
结点
分布式
路径
实例
学习
内容
地址
队列
作用
信息
功能
就是
思路
情况
接口
文件
文件名
文章
日期
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网站查询服务器www
数据库插入失败的原因
南京网络安全公司三板
网络技术论坛是什么意思
辽宁软件开发外包多少钱
查找数据库中所有的数据用什么
新闻自由与网络安全
数据库往年试题及答案
某商业集团数据库
服务器2008忘了密码了怎么办
实时数据库系统更新画面
数据库怎么处理过期机制
服务器固态硬盘多久换一个
为什么企业不用微软数据库
数据库插入完语句后查看怎么查看
租方舟服务器
网络安全和软件开发职业
云和恩墨mogDB数据库
nitrado官网服务器
山西服务器电源怎么样
讧苏极限网络技术股份有
数据脚本存放在数据库
辽宁软件开发外包多少钱
我们网络安全
浪潮服务器采购
微信开发者云开发数据库
备案服务器如何找回
服务器可以挂外置显卡吗
妖精的尾巴服务器爆满怎么办
python将链表存数据库