


consul+.net core实现配置中心:
https://www.tnblog.net/aojiancc2/article/details/6815
nacos的安装参考:
https://www.tnblog.net/aojiancc2/article/details/7865
nacos的官方文档:
https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
.net 的sdk
https://github.com/nacos-group/nacos-sdk-csharp
nacos下.net的驱动地址:
https://github.com/nacos-group/nacos-sdk-csharp
.net6使用nacos作为配置中心基本使用
第一步,添加依赖库
<PackageReference Include="nacos-sdk-csharp" Version="1.3.4" />
<PackageReference Include="nacos-sdk-csharp.AspNetCore" Version="1.3.4" />
<PackageReference Include="nacos-sdk-csharp.Extensions.Configuration" Version="1.3.4" />
<PackageReference Include="nacos-sdk-csharp.IniParser" Version="1.3.4" />
<PackageReference Include="nacos-sdk-csharp.YamlParser" Version="1.3.4" />
第二步,在appsettings.json中配置好使用nacos的信息
{
"NacosConfig": {
"Listeners": [
{
"Optional": false,
"DataId": "tnblog.main.test",
"Group": "DEFAULT_GROUP"
}
],
//"Namespace": "csharp-demo", // Please set the value of Namespace ID !!!!!!!!
"ServerAddresses": [ "http://xxx.yyy.zzz.yyyy:8848" ],
"UserName": "nacos",
"Password": "nacos"
//"AccessKey": "",
//"SecretKey": ""
//"EndPoint": "acm.aliyun.com",
//"ConfigFilterAssemblies": [ "YouPrefix.AssemblyName" ],
//"ConfigFilterExtInfo": "some ext infomation"
}
}
最主要就是nacos服务的地址,登录nacos的账户与密码等。以及需要配置到nacos上面的配置信息,比如我这里配置的要读取的是Group为DEFAULT_GROUP,DataId为tnblog.main.test的配置。这个我们就需要在nacos中去配置好,相关的配置。
比如我们随便配置一点内容:
就把appsettings.json中默认的日志配置进去,然后加了一点数据库与Kestrel的配置,项目启动端口什么的。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Limits": {
"MaxConcurrentConnections": 100,
"MaxConcurrentUpgradedConnections": 100
},
"DisableStringReuse": true,
"EndPoints": {
"Http": {
"Url": "http://*:8805" // 项目启动端口
}
}
},
"DbConfig":{
"DbType": 0,
//数据库连接字符串
"ConnectionString": "Data Source=localhost;port=3306;Initial Catalog=TNBLOG;uid=root;pwd=123456;CharSet=utf8mb4;Allow User Variables=true;",
"IsAutoCloseConnection": true
}
}
在nacos中的配置效果如下:
第三步,在Program.cs中去加载nacos配置
var app = builder.Build();
builder.Host.UseNacosConfig(section: "NacosConfig", parser: null, logAction: null);
// .UseNacosConfig(section: "NacosConfig", parser: Nacos.YamlParser.YamlConfigurationStringParser.Instance logAction: null)
// .UseNacosConfig(section: "NacosConfig", parser: Nacos.IniParser.IniConfigurationStringParser.Instance logAction: null)
//v1.3.3之前版本的用法
//builder.Host.ConfigureAppConfiguration(webBuilder =>
//{
// webBuilder.AddNacosV2Configuration(webBuilder.Build().GetSection("nacos"));
// Console.WriteLine("ConfigureWebHostDefaults");
//});
基本的操作就完成了,现在我们读取配置文件的内容就已经是配置在nacos上面的了
测试读取配置
private readonly IConfiguration _configuration;
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
[HttpGet]
public IEnumerable<string> Get()
{
var dbConfig = _configuration.GetSection("DbConfig");
//读取连接字符串配置
string connectionString = dbConfig["ConnectionString"];
//读取配置
string isAutoCloseConnection = _configuration["DbConfig:IsAutoCloseConnection"];
return new List<string>() { connectionString, isAutoCloseConnection };
}
使用配置的启动端口8805去访问项目进行测试就能看到配置会被成功读取:
项目下载地址
https://download.tnblog.net/resource/index/f0c04703387b4ec5908ba4e022ccbe81
加载多个配置文件,比如加载独立的与公共的
很简单在Listeners中去配置多个就行了,这样就可以加载多个配置文件了。
比如我这里加载了tnblog.main.common以及tnblog.main.test两个配置文件。
加载多个配置文件后,每个配置文件中的内容都可以使用,如果多个配置文件中有重复的配置,后面的会覆盖前面的。
测试读取的代码
在两个配置文件中去写点配置,然后读取测试即可
[HttpGet]
public IEnumerable<string> Get()
{
var dbConfig = _configuration.GetSection("DbConfig");
//读取连接字符串配置
string connectionString = dbConfig["ConnectionString"];
//读取配置
string isAutoCloseConnection = _configuration["DbConfig:IsAutoCloseConnection"];
//读取common里边的配置
string UserName = _configuration["UserName"];
string Password = _configuration["Password"];
return new List<string>() { connectionString, isAutoCloseConnection };
}
怎么动态的加载不同的配置文件,比如动态切换生产环境与本地开发环境
很简单,配合.net 中的环境变量使用即可。
比如我们开发的环境使用的nacos地址是http://192.168.1.1:8848,
线上使用的nacos地址是https://www.tnblog.net/nacos
我们就可以在appsettings.json中配置两个出来
比如
//开发环境使用的nacos
"NacosConfig-Development": {
"Listeners": [
{
"Optional": false,
"DataId": "tnblog.main.test",
"Group": "DEFAULT_GROUP"
}
],
"ServerAddresses": [ "http://192.168.1.1:8848" ],
"UserName": "nacos",
"Password": "nacos"
},
//正式环境使用的nacos
"NacosConfig-Production": {
"Listeners": [
{
"Optional": false,
"DataId": "tnblog.main.test",
"Group": "DEFAULT_GROUP"
}
],
"ServerAddresses": [ "https://www.tnblog.net/nacos" ],
"UserName": "nacos",
"Password": "nacos"
}
然后在Program.cs使用nacos配置的时候根据环境变量来即可
//获取环境变量。可以环境变量的不同去读取不同naocs服务的配置
string environmentName = builder.Environment.EnvironmentName;
//nacos注册中心
builder.Host.UseNacosConfig(section: "NacosConfig-"+ environmentName, parser: null, logAction: null);
测试的时候你本地直接运行获取的就是Development的配置,如果是发布出来后运行的获取的就是Production
当然你也可以在同一个nacos服务中根据不同的环境变量去加载不同的配置文件
比如你在nacos中创建配置环境的时候可以命名:tnblog.main.test.Development以及tnblog.main.test.Production然后根据不同的环境变量去加载不同的配置。根据实际情况灵活运用即可。
常用错误解决
….
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)