zoukankan      html  css  js  c++  java
  • zookeeper实现的分布式锁

     在分布式系统中,多个jvm对共享资源进行操作时候,要加上锁,这就是分布式锁

    利用zookeeper的临时节点的特性,可以实现分布式锁

    public class ZookeeperDistrbuteLock extends ZookeeperAbstractLock {
    
        @Override
        boolean tryLock() {
            try {
                zkClient.createEphemeral(lockPath);
                return true;
            } catch (Exception e) {
                return false;
            }
    
        }
    
        @Override
        void waitLock() {
    
            // 使用zk临时事件监听
            IZkDataListener iZkDataListener = new IZkDataListener() {
    
                public void handleDataDeleted(String path) throws Exception {
                    if (countDownLatch != null) {
                        countDownLatch.countDown();
                    }
                }
    
                public void handleDataChange(String arg0, Object arg1) throws Exception {
    
                }
            };
            // 注册事件通知
            zkClient.subscribeDataChanges(lockPath, iZkDataListener);
            if (zkClient.exists(lockPath)) {
                countDownLatch = new CountDownLatch(1);
                try {
                    countDownLatch.await();
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
            // 监听完毕后,移除事件通知
            zkClient.unsubscribeDataChanges(lockPath, iZkDataListener);
        }
    
    }

    项目结构:

    github下载地址:https://github.com/jake1263/zookeeper-lock

  • 相关阅读:
    day006 数字类型和字符串类型的内置方法
    awk技巧 nginx access.log
    测试访问速度
    ELK Deployed
    jenkins权限控制
    linux 系统优化
    nginx 刷新显示404
    虚拟机安装的ubutun全屏
    在线生成二维码
    GIT 命令集
  • 原文地址:https://www.cnblogs.com/moris5013/p/11242784.html
Copyright © 2011-2022 走看看