コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }