公司要做c# .netcore 微服务架构,就想到了用nacos作为微服务注册中心来管理微服务配置文件;nacos是一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台,它提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理。
Ps:Nacos服务除了 8848 端口要开启外,还需要一并开放 9848、9849 不然配置读取会失败。如果是docker容器化部署也是需要将这几个端口一并映射出来
安装Nacos包
Install-Package nacos-sdk-csharp -Version 1.3.2
Install-Package nacos-sdk-csharp.AspNetCore -Version 1.3.2
Install-Package nacos-sdk-csharp.Extensions.Configuration -Version 1.3.2
Install-Package nacos-sdk-csharp.IniParser -Version 1.3.2
Install-Package nacos-sdk-csharp.YamlParser -Version 1.3.2
加入Nacos配置
在 appsettings.json
文件中加入如下节点;
//读取配置中心配置
"NacosConfig": {
"Listeners": [
{
"Optional": false,
//配置名称
"DataId": "arg-cscomm-dev",
//配置组名
"Group": "DEV_GROUP"
}
],
//租户名称,一般与服务名一致
"Tenant": "ia-csuser",
//所属命名空间id
"Namespace": "ia-arg-dev",
"ServerAddresses": ["http://192.168.200.50:8848/"],
"UserName": "nacos",
"Password": "nacos",
"ConfigUseRpc": true,
"NamingUseRpc": true
},
//Nacos服务注册发现配置
"nacos": {
"ServerAddresses": ["http://192.168.200.50:8848/"],
"DefaultTimeOut": 15000,
//所属命名空间id
"Namespace": "ia-arg-dev",
//nacos登录用户
"UserName": "nacos",
//nacos登录密码
"Password": "nacos",
"ListenInterval": 1000,
//当前服务注册名称
"ServiceName": "ia-csuser",
//服务权重
"Weight": 100,
"ConfigUseRpc": true,
"NamingUseRpc": true
}
读取远程配置
在 Program.cs
文件中注入nacos配置服务,即可读取配置中心对应配置。
public class Program
{
public static void Main(string[] args)
{
try
{
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public static IHostBuilder CreateWebHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(builder =>
{
builder.ConfigureAppConfiguration((env, config) =>
{
var c = config.Build();
config.SetBasePath(env.HostingEnvironment.ContentRootPath);
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config.AddEnvironmentVariables();
//注入Nacos配置中心服务,用于读取远程配置
config.AddNacosV2Configuration(c.GetSection("NacosConfig"));
})
.UseStartup<Startup>();
});
}
}
注入Nacos服务
在 Startup.cs
文件 ConfigureServices
方法中加入如下代码,即可完成nacos服务注入;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
//注入Nacos服务
services.AddNacosAspNet(Configuration);
//注入微服务互调
services.AddNacosV2Naming(Configuration);
}