/// <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"); }