Пример #1
0
        /// <summary>
        /// 按推送节点更新
        /// </summary>
        /// <param name="path">变更路径</param>
        private static void UpdateZookeeper(string path, string configData)
        {
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            if (string.IsNullOrEmpty(configData))
            {
                return;
            }

            logger.LogDebug($"更新路径:{path},更新内容:{configData}");

            try
            {
                lock (_objLock)
                {
                    string[] ps = path.Split("/", StringSplitOptions.RemoveEmptyEntries);
                    switch (ps[ps.Length - 1])
                    {
                    case DbModelContextManager.DATABASE:     // 数据库,从zookeeper推过来的直接就是数据库和脚本的xml内容,这个跟文件有区别,文件是通过 ref引到外部文件的
                                                             // DataBase db = Newtonsoft.Json.JsonConvert.DeserializeObject<DataBase>(configData);
                        var xmlStr = XElement.Parse(configData);
                        DbModelContextManager.Initlize(xmlStr);

                        // Config.DataBase = db; // 把本地的完整配置更新,数据库配置不需要更新全局
                        break;

                    case ConfigManager.CONSTKEYVALUE:     // 常量
                        var keyValue =
                            Newtonsoft.Json.JsonConvert.DeserializeObject <Configuration>(configData);
                        ConfigManager.Initlize(keyValue.ConstKeyValue);
                        Config.ConstKeyValue = keyValue.ConstKeyValue;
                        break;

                    case CacheManager.RedisConfig:     // redis
                        var redisConfig =
                            Newtonsoft.Json.JsonConvert.DeserializeObject <Configuration>(configData);
                        CacheManager.Initlize(redisConfig.RedisConfig);
                        Config.RedisConfig = redisConfig.RedisConfig;
                        break;

                    case MQHostConfigManager.RabbitMQ:     // rabbitMQ
                        var mq = Newtonsoft.Json.JsonConvert.DeserializeObject <Configuration>(configData);
                        MQHostConfigManager.Initlize(mq.RabbitMQ);
                        Config.RabbitMQ = mq.RabbitMQ;
                        break;

                    case FileServerManager.FileServerName:     // fileserver
                        var fs = Newtonsoft.Json.JsonConvert.DeserializeObject <Configuration>(configData);
                        FileServerManager.Initlize(fs.FileServer);
                        Config.FileServer = fs.FileServer;
                        break;

                    case SuperGMS.HttpProxy.SuperHttpProxy.HttpProxy:     //HttpProxy
                        var pxyName = Newtonsoft.Json.JsonConvert.DeserializeObject <Configuration>(configData);
                        Config.HttpProxy = pxyName.HttpProxy;
                        break;
                    }

                    updateConfigurationAction?.Invoke(ps[ps.Length - 1], Config); // 执行用户自定义的回调,目前只有log在用,其他不用
                }
            }
            catch (Exception ex)
            {
                logger.LogCritical(ex, $"ServerSetting.UpdateZookeeper.Error.path={path},configData={configData}");
            }
        }
Пример #2
0
 /// <summary>
 /// 获取ConstValue配置信息
 /// </summary>
 /// <param name="key">key值</param>
 /// <returns>ConstKeyValue</returns>
 public static ConstItem GetConstValue(string key)
 {
     return(ConfigManager.GetConstKeyValue(key));
 }