/// <summary> /// 同步分布式缓存键值对 /// </summary> /// <returns></returns> private int SyncKeyValues() { var kvs = new List <Tuple <string, string> >(); //刷新键值 try { foreach (var key in ConsulCache.Instance.GetKeys()) { var value = ConsulLoader.GetKeyValue(key) .GetAwaiter().GetResult(); if (value != null) { kvs.Add(new Tuple <string, string>(key, value)); } } } catch { } int count = ConsulCache.Instance.SetKeyValue(kvs.ToArray()); //刷新Tags foreach (var sName in ConsulCache.Instance.GetServiceNames()) { //var serviceTagKey = string.Format(ServiceTagsKeyFormat, serviceName, sName, Dns.GetHostName()); var serviceTagKey = GetServiceTagsKey(sName); ConsulCache.Instance.SetServiceTag(sName, ConsulCache.Instance.GetKeyValue(serviceTagKey)); } return(count); }
/// <summary> /// 根据键获取值 /// </summary> /// <param name="key">键</param> /// <returns>值</returns> public string GetKeyValue(string key) { var value = ConsulCache.Instance.GetKeyValue(key); try { if (value == null && !ConsulCache.Instance.GetKeys().Contains(key)) { value = ConsulLoader.GetKeyValue(key).GetAwaiter().GetResult(); ConsulCache.Instance.SetKeyValue(new Tuple <string, string>(key, value)); } } catch { } return(value); }
/// <summary> /// 根据键从Consul直接获取获取值,不缓存 /// </summary> /// <param name="key">键</param> /// <returns>值</returns> public string GetKeyValueNoCache(string key) { var value = ConsulLoader.GetKeyValue(key).GetAwaiter().GetResult(); return(value); }
/// <summary> /// 初始化 /// </summary> public void Initialize() { string basePath = null; #if !CORECLR basePath = System.Web.HttpRuntime.AppDomainAppPath; #else basePath = Directory.GetCurrentDirectory(); #endif //读取配置 var consulConfig = new ConfigurationBuilder() .SetBasePath(basePath) .AddJsonFile("Config/consulplugin.json", true, false) .Build().Get <ConsulConfigSection>(); serviceName = consulConfig.ServiceName; refreshBreak = consulConfig.RefreshBreak; heartBreak = consulConfig.HeartBreak; //注册服务 try { ConsulLoader.RegsterService(serviceName, consulConfig.ServiceTags, consulConfig.ServicePort, consulConfig.HeartBreak, consulConfig.HttpCheck, consulConfig.TcpCheck).GetAwaiter().GetResult(); } catch { throw; } //若不存在HttpCheck且Interval存在时发送初始心跳 if (string.IsNullOrEmpty(consulConfig.HttpCheck) && string.IsNullOrEmpty(consulConfig.TcpCheck) && heartBreak > 0) { HeartBreakService(); } //读取缓存键值对配置信息 if (consulConfig.KeyValues != null) { foreach (KeyValueElement kvConfig in consulConfig.KeyValues) { ConsulCache.Instance.SetKeyValue(new Tuple <string, string>(kvConfig.Name, kvConfig.Value)); } } //读取依赖服务配置信息 if (consulConfig.Services != null) { foreach (ServiceElement serviceConfig in consulConfig.Services) { ConsulCache.Instance.SetServiceTag(serviceConfig.Name, serviceConfig.ServiceTags); var serviceTagKey = GetServiceTagsKey(serviceConfig.Name); try { if (string.IsNullOrEmpty(ConsulLoader.GetKeyValue(serviceTagKey).GetAwaiter().GetResult())) { ConsulLoader.SetKeyValue(serviceTagKey, serviceConfig.ServiceTags).GetAwaiter().GetResult(); } } catch { } ConsulCache.Instance.SetKeyValue(new Tuple <string, string>(serviceTagKey, serviceConfig.ServiceTags)); } } //初次同步依赖服务信息及缓存信息 SyncKeyValues(); SyncServices(); //若不存在HttpCheck且Interval存在时开启心跳线程 if (string.IsNullOrEmpty(consulConfig.HttpCheck) && string.IsNullOrEmpty(consulConfig.TcpCheck) && heartBreak > 0) { new Thread(HeartProcess) { IsBackground = true }.Start(); } //同步线程开启 new Thread(SyncProcess) { IsBackground = true }.Start(); }
/// <summary> /// 初始化 /// </summary> public void Initialize() { //读取配置 var consulConfig = (ConsulConfigSection)ConfigurationManager.GetSection("consulplugin"); serviceName = consulConfig.ServiceName; refreshBreak = consulConfig.RefreshBreak; heartBreak = consulConfig.HeartBreak; //注册服务 try { ConsulLoader.RegsterService(serviceName, consulConfig.ServiceTags, consulConfig.ServicePort, consulConfig.HeartBreak, consulConfig.HttpCheck, consulConfig.TcpCheck).GetAwaiter().GetResult(); } catch { } //若不存在HttpCheck且Interval存在时发送初始心跳 if (string.IsNullOrEmpty(consulConfig.HttpCheck) && string.IsNullOrEmpty(consulConfig.TcpCheck) && heartBreak > 0) { HeartBreakService(); } //读取缓存键值对配置信息 foreach (KeyValueElement kvConfig in consulConfig.KeyValues) { ConsulCache.Instance.SetKeyValue(new Tuple <string, string>(kvConfig.Name, kvConfig.Value)); } //读取依赖服务配置信息 foreach (ServiceElement serviceConfig in consulConfig.Services) { ConsulCache.Instance.SetServiceTag(serviceConfig.Name, serviceConfig.ServiceTags); //var serviceTagKey = string.Format(ServiceTagsKeyFormat, serviceName, serviceConfig.Name, Dns.GetHostName()); var serviceTagKey = GetServiceTagsKey(serviceConfig.Name); try { if (string.IsNullOrEmpty(ConsulLoader.GetKeyValue(serviceTagKey).GetAwaiter().GetResult())) { ConsulLoader.SetKeyValue(serviceTagKey, serviceConfig.ServiceTags).GetAwaiter().GetResult(); } } catch { } ConsulCache.Instance.SetKeyValue(new Tuple <string, string>(serviceTagKey, serviceConfig.ServiceTags)); } //初次同步依赖服务信息及缓存信息 SyncServices(); SyncKeyValues(); //若不存在HttpCheck且Interval存在时开启心跳线程 if (string.IsNullOrEmpty(consulConfig.HttpCheck) && string.IsNullOrEmpty(consulConfig.TcpCheck) && heartBreak > 0) { new Thread(HeartProcess) { IsBackground = true }.Start(); } //同步线程开启 new Thread(SyncProcess) { IsBackground = true }.Start(); }