/// <summary> /// 加载节点 /// </summary> /// <param name="input">"name=dc1,ip=192.168.X.X,port=6659,timeout=3000,weight=5"</param> public bool Add(Dictionary <string, string> input) { lock (LockAdd) { try { var ip = GetValidIp(input["ip"], Convert.ToInt32(input["port"])); if (ip == string.Empty) { return(false); } ServiceInfo ips = new ServiceInfo { Timeout = input["timeout"] == null ? TimeOut : Convert.ToInt32(input["timeout"]), Name = input["name"], NickName = input["nickname"], Ip = ip, Port = Convert.ToInt32(input["port"]) }; int weight = input["weight"] == null ? 1 : (int)Convert.ToDecimal(input["weight"]); ips.Weight = weight; #region 原有服务 var oldService = ServiceInfoList.FirstOrDefault(t => ips.Ip == t.Ip && ips.Port == t.Port); #endregion ServiceInfoList.RemoveAll(t => ips.Ip == t.Ip && ips.Port == t.Port); for (int w = 0; w < weight; w++) //权重 { ServiceInfoList.Add(ips); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"{ips.Ip}:{ips.Port}"); foreach (var f in ips.Name.Split(',')) { stringBuilder.AppendLine($"{f}"); } stringBuilder.AppendLine($"{"权重:" + ips.Weight}"); stringBuilder.AppendLine($"{ips.NickName}已登记!"); Log.Anno(stringBuilder.ToString(), typeof(ThriftConfig)); #region 线和变更通知 if (OnlineNotice != null && oldService == null) { OnlineNotice.Invoke(ips, NoticeType.OnLine); } else if (ChangeNotice != null && oldService != null) { ChangeNotice.Invoke(ips, oldService); } #endregion } catch (Exception ex) { Log.Anno(ex, typeof(ThriftConfig)); return(false); } finally { Save(); } } return(true); }
/// <summary> /// 变更服务信息 /// </summary> /// <param name="input"></param> /// <returns></returns> public bool ChangeMicroServiceWeight(Dictionary <string, string> input) { lock (LockAdd) { try { if (!input.ContainsKey("ip") || !input.ContainsKey("port") || (!input.ContainsKey("weight") && !input.ContainsKey("timeout"))) { return(false); } var ip = input["ip"]; int.TryParse(input["port"], out int port); var hasWeight = false; int weight = 0; int timeout = 0; if (input.ContainsKey("weight")) { hasWeight = int.TryParse(input["weight"], out weight); } var hasTimeOut = false; if (input.ContainsKey("timeout")) { hasTimeOut = int.TryParse(input["timeout"], out timeout); } #region 原有服务 var oldService = ServiceInfoList.FirstOrDefault(t => ip == t.Ip && port == t.Port); if (oldService == null) { return(false); } #endregion ServiceInfo serviceInfo = new ServiceInfo() { Timeout = oldService.Timeout, Name = oldService.Name, NickName = oldService.NickName, Ip = oldService.Ip, Port = oldService.Port, Weight = oldService.Weight }; if (hasTimeOut) { serviceInfo.Timeout = timeout; } if (hasWeight) { serviceInfo.Weight = weight; } ServiceInfoList.RemoveAll(t => ip == t.Ip && port == t.Port); for (int w = 0; w < weight; w++) //权重 { ServiceInfoList.Add(serviceInfo); } /* * 至少保留一条服务信息数据 */ if (weight <= 0) { ServiceInfoList.Add(serviceInfo); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"{serviceInfo.Ip}:{serviceInfo.Port}"); foreach (var f in serviceInfo.Name.Split(',')) { stringBuilder.AppendLine($"{f}"); } stringBuilder.AppendLine($"{"权重:" + serviceInfo.Weight}"); stringBuilder.AppendLine($"{serviceInfo.NickName}已登记!"); Log.Anno(stringBuilder.ToString(), typeof(ThriftConfig)); #region 线和变更通知 if (ChangeNotice != null && oldService != null) { ChangeNotice.Invoke(serviceInfo, oldService); } #endregion } catch (Exception ex) { Log.Anno(ex, typeof(ThriftConfig)); return(false); } finally { Save(); } } return(true); }
/// <summary> /// 加载节点 /// </summary> /// <param name="input">"name=dc1,ip=192.168.X.X,port=6659,timeout=3000,weight=5"</param> public bool Add(Dictionary <string, string> input) { lock (LockAdd) { try { var ip = GetValidIp(input["ip"], Convert.ToInt32(input["port"])); if (ip == string.Empty) { return(false); } ServiceInfo ips = new ServiceInfo { Timeout = input["timeout"] == null ? TimeOut : Convert.ToInt32(input["timeout"]), Name = input["name"], NickName = input["nickname"], Ip = ip, Port = Convert.ToInt32(input["port"]) }; int weight = input["weight"] == null ? 1 : (int)Convert.ToDecimal(input["weight"]); ips.Weight = weight; #region 原有服务 var oldService = ServiceInfoList.FirstOrDefault(t => ips.Ip == t.Ip && ips.Port == t.Port); #endregion ServiceInfoList.RemoveAll(t => ips.Ip == t.Ip && ips.Port == t.Port); for (int w = 0; w < weight; w++) //权重 { ServiceInfoList.Add(ips); } Log.WriteLine($"{ips.Ip}:{ips.Port}", ConsoleColor.DarkGreen); ips.Name.Split(',').ToList().ForEach(f => { Log.WriteLine($"{f}", ConsoleColor.DarkGreen); }); Log.WriteLine($"{"权重:" + ips.Weight}", ConsoleColor.DarkGreen); Log.WriteLine($"{ips.NickName}已登记!", ConsoleColor.DarkGreen); Log.WriteLineNoDate($"-----------------------------------------------------------------------------"); #region 线和变更通知 if (OnlineNotice != null && oldService == null) { OnlineNotice.Invoke(ips, NoticeType.OnLine); } else if (ChangeNotice != null && oldService != null) { ChangeNotice.Invoke(ips, oldService); } #endregion } catch (Exception ex) { Console.WriteLine(ex); return(false); } finally { Save(); } } return(true); }
/// <summary> /// 加载节点 /// </summary> /// <param name="input">"name=dc1,ip=192.168.X.X,port=6659,timeout=3000,weight=5"</param> public bool Add(Micro input) { lock (LockAdd) { try { var ip = GetValidIp(input.Ip, input.Port); if (ip == string.Empty) { return(false); } ServiceInfo ips = new ServiceInfo { Timeout = input.Timeout, Name = input.Name, NickName = input.Nickname, Ip = ip, Port = input.Port }; int weight = input.Weight <= 0 ? 1 : input.Weight; ips.Weight = weight; #region 线和变更通知 var oldService = ServiceInfoList.FirstOrDefault(t => ips.Ip == t.Ip && ips.Port == t.Port); if (OnlineNotice != null && oldService == null) { OnlineNotice.Invoke(ips, NoticeType.OnLine); } else if (ChangeNotice != null && oldService != null) { ChangeNotice.Invoke(ips, oldService); } #endregion ServiceInfoList.RemoveAll(t => ips.Ip == t.Ip && ips.Port == t.Port); for (int w = 0; w < weight; w++) //权重 { ServiceInfoList.Add(ips); } Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss}"); Console.WriteLine($"{ips.Ip}:{ips.Port}"); ips.Name.Split(',').ToList().ForEach(f => { Console.WriteLine($"{f}"); }); Console.WriteLine($"{"w:" + ips.Weight}"); Console.WriteLine($"{ips.NickName}已登记!"); Console.ResetColor(); Console.WriteLine($"----------------------------------------------------------------- "); } catch (Exception ex) { Console.WriteLine(ex); return(false); } finally { Save(); } } return(true); }