/// <summary> /// 创建锁的临时有序节点 /// </summary> /// <param name="zkClient"></param> /// <param name="path"></param> /// <returns></returns> public async virtual Task <string> CreateLockNodeAsync(ZooKeeper zkClient, string path) { var ourPath = await zkClient .RecursionCreateAsync(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); return(ourPath); }
private async Task <int> GetOrCreateLeasesNode(string leasesPath, int maxLeases) { try { var count = await _zkClient.GetDateIntAsync(leasesPath); if (count != maxLeases) { throw new ApplicationException("maxLeases与Zookeeper中现有Semaphore节点数据不一致"); } return(count); } catch (KeeperException.NoNodeException) { // 创建Leases节点 var data = Encoding.UTF8.GetBytes(maxLeases.ToString()); await _zkClient.RecursionCreateAsync(leasesPath, data, CreateMode.PERSISTENT); } return(maxLeases); }