.NetCore 接入 Nacos,实现配置中心和服务注册

因历史项目(.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时,务必设置ConfigUseRpcNamingUseRpcfalse。否则服务注册不了,也获取不到配置!!!

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);
    }
}
相关推荐
老龄程序员1 小时前
基于OpenIddict6.4.0搭建的授权UI管理界面
.netcore
武藤一雄13 小时前
C# 关于多线程如何实现需要注意的问题(持续更新)
windows·后端·microsoft·c#·.net·.netcore·死锁
冰茶_1 天前
WPF路由事件:隧道与冒泡机制解析
学习·c#·.net·wpf·.netcore·mvvm
武藤一雄1 天前
C# 关于GC垃圾回收需要注意的问题(持续更新)
后端·微软·c#·.net·.netcore
武藤一雄1 天前
C# 关于应用程序域(AppDomain)需要注意的问题(持续更新)
后端·microsoft·微软·c#·.net·.netcore
_loehuang_4 天前
【mole】Mole User 开源用户中心:一站式身份认证与权限管理解决方案
spring boot·nacos·开源·用户中心·mole
csdn_aspnet6 天前
在 ASP.NET Core 中发布 RabbitMQ 消息
rabbitmq·.netcore
csdn_aspnet6 天前
在 ASP.NET Core 中使用(消费) RabbitMQ 消息
rabbitmq·.netcore
csdn_aspnet7 天前
ASP.NET Core 应用程序中的单点登录 (SSO)
.netcore·sso
csdn_aspnet7 天前
使用 RabbitMQ 和 MassTransit 在 .NET Core 中实现强大的微服务:处理订阅者故障和消息恢复
微服务·rabbitmq·.netcore