当前位置: 首页 > news >正文

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

因历史项目(.Netcore3.1)需要,需要使用Nacos作为配置中心和服务发现,本文作为记录使用Nacos的笔记。

文章目录

      • 一、相关资料
      • 二、Nacos后台增加配置
      • 三、代码接入
          • 1、在`appsettings.json`中加入配置
          • 2、`Program`调整
          • 3、`Startup`调整
          • 4、启动项目,获取配置,查看服务注册情况

一、相关资料

Nacos的.Net SDK https://github.com/nacos-group/nacos-sdk-csharp
Nacos官网https://www.nacos.io/

二、Nacos后台增加配置

增加命名空间
在这里插入图片描述
然后在命名空间下增加配置
在这里插入图片描述
在这里插入图片描述

{"AppSettings": {"Str": "val","num": 1,"arr": [1,2,3],"subobj": {"a": "b"}}
}

三、代码接入

首先,创建.netcore web api项目。

1、在appsettings.json中加入配置
"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"));

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中增加

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));services.AddNacosAspNet(Configuration, "NacosConfig");

AppSettings测试代码,未写全

public class AppSettings
{public string Str { get; set; }public int Num { get; set; }
}
4、启动项目,获取配置,查看服务注册情况

查看服务注册情况
在这里插入图片描述
获取配置

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);}
}
http://www.xdnf.cn/news/1374283.html

相关文章:

  • 本地windows电脑部署html网页到互联网:html+node.js+ngrok/natapp
  • oracle 表空间扩容(增加新的数据文件)
  • 使用appium对安卓(使用夜神模拟器)运行自动化测试
  • STM32八大模式
  • 基于单片机空调温度控制测温ds18b20系统Proteus仿真(含全部资料)
  • 人机交互如何变革科普展示?哪些技术正成吸睛焦点?
  • 初春养生指南模板页
  • Rust 登堂 之 迭代器Iterator(三)
  • el-carousel在新增或者删除el-carousel-item时默认跳到第一页的原因和解决
  • betaflight configurator 如何正确烧写飞控
  • 基于muduo库的图床云共享存储项目(二)
  • Linux 云服务器内存不足如何优化
  • 【RAG】使用llamaindex进行RAG开发
  • 6 种无需 iTunes 将照片从 iPhone 传输到电脑
  • TDengine IPv6 支持用户手册
  • “java简单吗?”Java的“简单”与PHP的挑战:编程语言哲学-优雅草卓伊凡
  • KDMS V4 重磅升级,智能迁移赋能国产化替代!
  • android证书相关
  • 像WPS Office 一样处理pdf页面尺寸
  • AI 解决生活小事 2——用 AI 做一回新闻播客
  • 使用人工智能写一个websocket聊天页面
  • PDF补丁丁:开源多年,完全免费的多功能 PDF 工具箱
  • Agno Agent​​
  • 如何借助文档控件 TX Text Control 轻松优化 PDF 文件大小?
  • 计算机视觉(三):opencv环境搭建和图片显示
  • 主键索引和普通索引的区别
  • 基于 Qt 实现的动态流程图画板框架设计与实现
  • 在Windows系统上升级Node.js和npm
  • FastAPI + SQLModel 从 0 搭到完整 CRUD
  • STL库——vector(类模拟实现)