.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);
    }
}
相关推荐
吹牛不交税7 小时前
admin.net-v2 框架使用笔记-netcore8.0/10.0版
vue.js·.netcore
CodeCaptain1 天前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
斯普信专业组4 天前
Nacos-MCP 融合架构:运维nacos的MCP服务项目
运维·nacos·架构
张3蜂4 天前
java springboot2.0 api ;.netcore8 api ;python GunicornAPI ,哪种更强?请从多个维度,对比分析
java·python·.netcore
七夜zippoe4 天前
分布式配置中心终极对决 Spring Cloud Config与Apollo架构深度解析
分布式·架构·springcloud·apollo·配置中心
切糕师学AI5 天前
.NET Core Web 中的健康检查端点(Health Check Endpoint)
前端·kubernetes·.netcore
魔芋红茶5 天前
NACOS 二次开发指南
nacos
xdpcxq10295 天前
.NET Core 双数据库 PostgreSQL 与 SQLite 和平共处
数据库·postgresql·.netcore
没有bug.的程序员6 天前
Spring Cloud Alibaba:Nacos 配置中心与服务发现的工业级深度实战
java·spring boot·nacos·服务发现·springcloud·配置中心·alibaba