NET CORE 8 与nacos配合使用
nocos 2.2.3
nacos-sdk-csharp nacos-sdk-csharp.AspNetCore nacos-sdk-csharp.Extensions.Config nacos-sdk-csharp.IniParser nacos-sdk-csharp.YamlParser 上面五个包我都装了,版本1.3.10
Program.cs 的main方法中
UpdateAppSettingsAsync
//环境变量,优先级最高,用于docker 部署 if (builder.Configuration["NacosConfig:ServerAddresses"] != null) { try { UpdateAppSettingsAsync("NacosConfig:ServerAddresses", builder.Configuration["NacosConfig:ServerAddresses"].Split(",")).Wait(); UpdateAppSettingsAsync("NacosConfig:Namespace", builder.Configuration["NacosConfig:Namespace"]).Wait(); UpdateAppSettingsAsync("NacosConfig:Password", builder.Configuration["NacosConfig:Password"]).Wait(); UpdateAppSettingsAsync("NacosConfig:UserName", builder.Configuration["NacosConfig:UserName"]).Wait(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); builder.Configuration.AddNacosV2Configuration(builder.Configuration.GetSection("NacosConfig")); builder.Services.AddNacosV2Config(builder.Configuration.GetSection("NacosConfig")); builder.Services.AddNacosAspNet(builder.Configuration, "NacosConfig"); if (!string.IsNullOrWhiteSpace(builder.Configuration["Urls"])) builder.WebHost.UseUrls(builder.Configuration["Urls"]); // 临时构建ServiceProvider var tempProvider = builder.Services.BuildServiceProvider(); var nacosConfigService = tempProvider.GetRequiredService<INacosConfigService>(); var listeners = builder.Configuration.GetSection("NacosConfig:Listeners"); //获取nacos数据库配置构建数据库服务 foreach (var item in listeners.GetChildren()) { var dataSourceConfig = nacosConfigService.GetConfig(item.GetSection("DataId").Value, item.GetSection("Group").Value, 3000).Result; var dic = YamlConfigurationStringParser.Instance.Parse(dataSourceConfig); // Console.WriteLine(dataSourceConfig); if (dic.Keys.Contains("datasource:base:url")) { string url = dic["datasource:base:url"].ToString(); string username = dic["datasource:base:username"].ToString(); string password = dic["datasource:base:password"].ToString(); builder.Services.AddSqlSugarSetupBaseDB(url, username, password); } //redis if (dic.Keys.Contains("spring:data:redis:host")) { string redisHost = dic["spring:data:redis:host"].ToString(); string redisPort = dic["spring:data:redis:port"].ToString(); string redisDatabase = dic["spring:data:redis:database"].ToString(); string redisConnectString = redisHost + ":" + redisPort + ",defaultDatabase=" + redisDatabase; if (dic.Keys.Contains("spring:data:redis:password")) { string redisPassword = dic["spring:data:redis:password"].ToString(); redisConnectString += ",password=" + redisPassword; } //连接池 if (dic.Keys.Contains("spring:data:redis:lettuce:pool")) { string redisPoolSize = dic["spring:data:redis:lettuce:pool:max-active"].ToString(); redisConnectString += ",poolsize=" + redisPoolSize; } var rds = new CSRedis.CSRedisClient(redisConnectString); RedisHelper.Initialization(rds); builder.Services.AddSingleton<IDistributedCache>(new Microsoft.Extensions.Caching.Redis.CSRedisCache(RedisHelper.Instance)); } }
appsettings.json结构
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "Urls": "http://*:9666", "NacosConfig": { "Listeners": [ { "Optional": false, "DataId": "datasource.yml", "Group": "DEFAULT_GROUP" }, { "Optional": false, "DataId": "base.yml", "Group": "DEFAULT_GROUP" }, { "Optional": false, "DataId": "env.yml", "Group": "DEFAULT_GROUP" } ], "EndPoint": "", "ServerAddresses": [ "http://192.168.1.1:8848" ], "DefaultTimeOut": 15000, "Namespace": "dev", "ListenInterval": 1000, "ServiceName": "ServiceName", "GroupName": "DEFAULT_GROUP", "ClusterName": "DEFAULT", "Ip": "", "PreferredNetworks": "", "Port": 0, "Weight": 100, "RegisterEnabled": true, "InstanceEnabled": true, "Ephemeral": true, "Secure": false, "AccessKey": "", "SecretKey": "", "UserName": "nacos", "Password": "password", "ConfigUseRpc": false, "NamingUseRpc": false, "NamingLoadCacheAtStart": "" } }