因历史项目(.Netcore3.1)需要,需要使用Nacos作为配置中心和服务发现,本文作为记录使用Nacos的笔记。
文章目录
一、相关资料
Nacos的.Net SDK https://github.com/nacos-group/nacos-sdk-csharp
Nacos官网https://www.nacos.io/
二、Nacos后台增加配置
增加命名空间

然后在命名空间下增加配置


javascript
{
"AppSettings": {
"Str": "val",
"num": 1,
"arr": [
1,
2,
3
],
"subobj": {
"a": "b"
}
}
}
三、代码接入
首先,创建.netcore web api项目。
1、在appsettings.json中加入配置
csharp
"NacosConfig": {
"Listeners": [ //配置监听列表,包含多个监听项
{
"Optional": false, //是否为可选配置。false表示如果配置不存在,应用启动会失败;true表示配置不存在时忽略
"DataId": "TimedTaskAPI",
"Group": "DEFAULT_GROUP" //配置所属的分组,默认为DEFAULT_GROUP
},
{
"Optional": false,
"DataId": "Application",
"Group": "DEFAULT_GROUP"
}
],
"ServerAddresses": [ "http://192.168.5.210:8848/" ], //Nacos 服务器地址列表
"DefaultTimeOut": 15000,
"Namespace": "8f67799f-0eb9-42b1-94e5-080d9b1c56ea", // 命名空间 ID,用于隔离不同环境的配置和服务,Please set the value of Namespace ID !!!!!!!!
"ListenInterval": 1000, //监听间隔时间,单位为毫秒
"ServiceName": "App1", //注册到注册中心的服务名称
"Weight": 100, //服务权重,用于服务路由时的负载均衡计算
"RegisterEnabled": true, //是否启用服务注册
"InstanceEnabled": true, //实例是否启用
"Ephemeral": true, //是否为临时实例,true表示是临时实例,服务宕机后会被自动摘除
"Secure": false, //是否使用安全连接
"UserName": "nacos",
"Password": "nacos",
"ConfigUseRpc": false, //是否使用 RPC 协议获取配置
"NamingUseRpc": false, //是否使用 RPC 协议进行服务发现
"NamingLoadCacheAtStart": "", //启动时是否加载服务发现缓存
"LBStrategy": "WeightRandom", //负载均衡策略,WeightRandom表示加权随机,WeightRoundRobin表示加权轮询
"Metadata": { //服务实例的元数据信息,为键值对形式
"aa": "bb",
"cc": "dd"
}
}
webapi未启用rpc时,务必设置
ConfigUseRpc和NamingUseRpc为false。否则服务注册不了,也获取不到配置!!!
2、Program调整
增加builder.AddNacosV2Configuration(c.GetSection("NacosConfig"));
csharp
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
var c = builder.Build();
builder.AddNacosV2Configuration(c.GetSection("NacosConfig"));
//以上默认是使用Json解析器解析配置,如果使用文本可以以下代码,或者使用yaml解析器
//builder.AddNacosV2Configuration(c.GetSection("NacosConfig"), parser: IniConfigurationStringParser.Instance);
//builder.AddNacosV2Configuration(c.GetSection("NacosConfig"), parser: YamlConfigurationStringParser.Instance);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
当前遇到的问题是:不知道如何启用多种格式配置,如:Json+Properties+Ymal。有哪位大佬知道,请不吝赐教。
3、Startup调整
在ConfigureServices中增加
csharp
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddNacosAspNet(Configuration, "NacosConfig");
AppSettings测试代码,未写全
csharp
public class AppSettings
{
public string Str { get; set; }
public int Num { get; set; }
}
4、启动项目,获取配置,查看服务注册情况
查看服务注册情况

获取配置
javascript
public class NcsController : ControllerBase
{
private readonly ILogger<RdsController> _logger;
private readonly IConfiguration _configuration;
private readonly AppSettings _appSettings;
public NcsController(ILogger<RdsController> logger, IConfiguration configuration, IOptionsMonitor<AppSettings> mOptions)
{
_logger = logger;
_configuration = configuration;
_appSettings = mOptions.CurrentValue;
}
[HttpGet]
public Task<bool> Test()
{
var s = _appSettings.Str;
var str = _configuration["ApiServer"];
return Task.FromResult(true);
}
}