Ejemplo n.º 1
0
        /// <inheritdoc />
        public async Task <object> LockAsync(params string[] keys)
        {
            var key = $"locks/{GetKey(keys)}";

            var lockResponse = await _etcdClient.LockAsync(key, _metadata);

            return(lockResponse.Key.ToStringUtf8());
        }
        /// <summary>
        /// 系统配置注册
        /// </summary>
        /// <param name="client">客户端</param>
        /// <param name="sysName">系统名称</param>
        /// <param name="registration">配置信息</param>
        /// <returns></returns>
        private static async Task AddConfigAsync(EtcdClient client, string sysName, AgentServiceRegistration registration)
        {
            string key      = "/" + sysName + "/config";
            string timeKey  = "/" + sysName + "/Time/" + registration.Name + "/" + registration.ID;
            var    leasersp = await client.LeaseGrantAsync(new LeaseGrantRequest()
            {
                ID = 0, TTL = 10
            });

            var lockrsp = await client.LockAsync(new V3Lockpb.LockRequest()
            {
                Lease = leasersp.ID, Name = (key + "1").ToGoogleString()
            });

            var rsp = await client.GetAsync(key);

            EtcdConfig config = new EtcdConfig();

            if (rsp.Kvs.Count == 0)
            {
                var lst = new List <AgentServiceRegistration>
                {
                    registration
                };
                config.Services = lst;
            }
            else
            {
                var val = JsonConvert.DeserializeObject <EtcdConfig>(rsp.Kvs[0].Value.FromGoogleString());
                List <AgentServiceRegistration> lst = new List <AgentServiceRegistration>(val.Services);
                lst.Add(registration);
                config.Services = lst;
            }
            string cof = JsonConvert.SerializeObject(config);
            await client.PutAsync(key, cof);

            await client.PutAsync(timeKey, DateTime.Now.ToString("yyyy-MM-dd mm:HH:ss"));

            await client.UnlockAsync(key + "1");
        }