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": ""
}
}

浙公网安备 33010602011771号