我们的项目严重依赖分布式锁。我知道curator提供了几种锁。我的问题是,我可以将创建节点用作互斥体吗?
CuratorFramework zkClient = zookeeperConnectionProvider.getZkClientForJobDistributeLock();
try {
zkClient.create()
.creatingParentsIfNeeded()
.withMode(CreateMode.EPHEMERAL)
.forPath("/" + job.getIdentifier().jobNodeString());
LOGGER.info(String.format("create node in zookeeper [%s]", job.getIdentifier().jobNodeString()));
} catch (Exception e) {
LOGGER.info(String.format("create job instance node in zookeeper failed [%s], reason [%s]",
job.getIdentifier().jobNodeString(),
e.getClass().getCanonicalName()));
return NO_WORK;
}
当第一个进程创建成功时,第二个进程得到
NodeExistsException
异常。如果这行不通,我想知道原因。