您可以通过创建模式CONTAINER
来实现此目的。当它下面没有任何子节点时,容器将被自动删除。
当您创建顺序临时节点时,请使用以下方法。
curatorFrameworkInstance.create()
.creatingParentContainersIfNeeded()
.withMode(CreateMode.PERSISTENT_SEQUENTIAL)
.forPath("/<some_path>/<parentNode>/<sequential_path_prefix>");
这里发生的是,策展人将创建父Z序节点<parentNode>
作为一个容器,如果它不存在。并且会在它下面创建短暂的顺序节点,这是您的问题中从1到5所描述的预期行为。当所有的孩子都死了的时候,父母的ZNode也会死亡。当您尝试再次创建子项时,creatingParentContainersIfNeeded()
子句将确保再次创建父容器。
对于进一步的阅读,这是CreateMode.CONTAINER
的文档。
的Z序节点将是一个容器节点。容器节点是特殊用途的节点,对于诸如领导者,锁等配方是有用的。当容器的最后一个孩子被删除时,容器成为服务器将来某个时候删除的候选者。给定这个属性,你应该准备在这个容器节点内创建子节点时得到KeeperException.NoNodeException。
注意:我已经使用Apache Curator Framework
回答你的问题,而不是直接使用ZooKeeper Client
。
我们你的实际需求是什么?你想要一个分布式序列号还是实际上希望子节点在那里没有间隙? –