有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Apache Curator分布式锁

我知道Apache Curator可以在zookeeper的基础上实现分布式锁功能。基于Apache策展人官方网站上发布的文档,它看起来非常易于使用。例如:

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(); }
}

但“进程间信号量emutex”的第二个参数“path”是什么意思?它的意思是基于API的“锁的路径”,但它到底是什么?谁能给我举个例子吗

如果我有数百万个锁,我需要创建数百万个“通往锁的路径”吗?zookeeper集群的最大锁数(znode)有限制吗?或者我们可以在进程释放锁时移除它吗


共 (1) 个答案

  1. # 1 楼答案

    关于收割者的一些例子

    @Test
    public void     testSomeNodes() throws Exception
    {
    
      Timing                  timing = new Timing();
      ChildReaper             reaper = null;
      CuratorFramework        client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
      try
      {
        client.start();
    
        Random              r = new Random();
        int                 nonEmptyNodes = 0;
        for ( int i = 0; i < 10; ++i )
        {
          client.create().creatingParentsIfNeeded().forPath("/test/" + Integer.toString(i));
          if ( r.nextBoolean() )
          {
            client.create().forPath("/test/" + Integer.toString(i) + "/foo");
            ++nonEmptyNodes;
          }
        }
    
        reaper = new ChildReaper(client, "/test", Reaper.Mode.REAP_UNTIL_DELETE, 1);
        reaper.start();
    
        timing.forWaiting().sleepABit();
    
        Stat    stat = client.checkExists().forPath("/test");
        Assert.assertEquals(stat.getNumChildren(), nonEmptyNodes);
      }
      finally
      {
        CloseableUtils.closeQuietly(reaper);
        CloseableUtils.closeQuietly(client);
      }
    }
    

    Java Code Examples for org.apache.curator.framework.recipes.locks.Reaper