zookeeper分布式锁(六)

来源:互联网 发布:回看 网络电视 编辑:程序博客网 时间:2024/05/17 03:22


非“幂等”操作:创建节点

zookeeper分布式锁(五)我们讲解了“幂等”和“非幂等”操作。

本节,我们将通过创建节点这个非“幂等”操作来创建对应方法。

我们通过在节点名称中添加UUID来标示唯一节点,这里我们用zookeeper的sessionid代替。

我们定义方法findPrefixInChildren()。

findPrefixInChildren()方法的访问权限是“private”,返回类型是“void”,参数有:

prefix,节点名称的前缀

zookeeper

dir,lock应用的根节点路径

代码如下:

<span style="white-space:pre"></span>//假如出现“网络丢失”的异常    //此时不能判断节点是否创建成功    //且节点的创建“非幂等”    //因此需要遍历所有的节点根据名称去判断节点是否已经存在    //如果存在,返回    //如果不存在,创建    //根据代码实现可以发现:    //判断节点是否存在是根据prefix参数进行判断的    //也就是说根据“"x-" + sessionId + "-"”进行是否存在的判断        private void findPrefixInChildren(String prefix, ZooKeeper zookeeper, String dir)             throws KeeperException, InterruptedException {            List<String> names = zookeeper.getChildren(dir, false);            for (String name : names) {                if (name.startsWith(prefix)) {                    id = name;                    if (LOG.isDebugEnabled()) {                        LOG.debug("Found id created last time: " + id);                    }                    break;                }            }            if (id == null) {                id = zookeeper.create(dir + "/" + prefix, data,                         getAcl(), EPHEMERAL_SEQUENTIAL);                if (LOG.isDebugEnabled()) {                    LOG.debug("Created id: " + id);                }            }        }


0 0
原创粉丝点击