当前位置:  开发笔记 > 编程语言 > 正文

Apache Curator分布式锁

如何解决《ApacheCurator分布式锁》经验,为你挑选了1个好方法。

我知道Apache Curator可以执行分布式锁定功能,该功能构建在zookeeper的顶部.根据Apache Curator官方网站上发布的文档,它看起来很容易使用.例如:

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.newClient("host:ip",retryPolicy);
client.start();

InterProcessSemaphoreMutex lock = new InterProcessSemaphoreMutex(client, path);
if(lock.acquire(10, TimeUnit.SECONDS))
{
     try { /*do something*/ }
     finally { lock.release(); }
}

但是"InterProcessSemaphoreMutex"的第二个参数"path"是什么意思呢?它意味着基于API的"锁定路径"但究竟是什么呢?谁能举个例子?

如果我有数百万的锁,我是否必须创造数百万的"锁定之路"?zookeeper集群的最大锁(znode)数量是否有限制?或者,当进程释放时,我们可以删除此锁吗?



1> Randgalt..:

ZooKeeper呈现了看起来像分布式文件系统的东西.对于任何ZooKeeper操作,配方等,您将"znodes"写入特定路径并监视更改.在这里看到:http://zookeeper.apache.org/doc/trunk/zookeeperOver.html#Simple+API(关于znodes).

对于策展人食谱,它需要知道您想要用来执行配方的基本路径.对于InterProcessSemaphoreMutex,路径是每个参与者应该使用的路径.即进程1和进程2都希望同时争用锁.因此,它们都使用相同的路径分配InterProcessSemaphoreMutex实例,例如"/ my/lock".将路径视为锁定标识符.在同一个ZooKeeper集群中,您可以使用不同的路径进行多次锁定.

希望这会有所帮助(免责声明:我是策展人的主要作者).


好的,所以对于路径"/ my/lock",当调用release()方法时,是否删除了这个节点?
推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有