private void GetConfigData() { try { var configNotification = _remoteConfig.GetConfigNotification(); var namespaceNames = configNotification.Select(m => m.NamespaceName).ToArray(); var configs = _remoteConfig.GetConfigsByNamespaces(namespaceNames, out var hasChanged); //如果配置有变更则更新配置到内存和本地文件 if (hasChanged) { var configsArray = configs.SelectMany(m => m.Configurations).ToArray(); var newConfigData = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); Array.ForEach(configsArray, m => { newConfigData[m.Key] = m.Value; }); Data = newConfigData; LocalConfigs.Set(base.Data); OnReload(); } EnsureExistsLocalConfigFile(); } catch (Exception ex) { Logger?.LogError(ex, "Apollo定时轮询核心方法异常"); EnsureExistsLocalConfigFile(); GetConfigFromLocalConfigFile(); } }
/// <summary> /// 读取本地缓存配置,用于Apollo挂掉情况 /// </summary> private void GetConfigFromLocalConfigFile() { var configs = LocalConfigs.Get(); Data = configs; OnReload(); Logger?.LogCritical("Apollo拉取远程配置失败,当前已命中本地缓存配置文件。请及时联系运维人员,修复Apollo"); }
/// <summary> /// 确保本地配置文件存在 /// </summary> private void EnsureExistsLocalConfigFile() { if (!LocalConfigs.ExistsCacheFile()) { Logger?.LogWarning("Apollo本地缓存配置文件不存在,即将创建"); LocalConfigs.Set(base.Data); } }
public static LocalConfigs CreateInstance() { if (_Singleton != null) { return(_Singleton); } lock (_SingletonLock) { if (_Singleton != null) { return(_Singleton); } _Singleton = new LocalConfigs(); } return(_Singleton); }