您可以通過創建模式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
。
我們你的實際需求是什麼?你想要一個分佈式序列號還是實際上希望子節點在那裏沒有間隙? –