因歷史項目(.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時,務必設置
ConfigUseRpc
和NamingUseRpc
為false
。否則服務注冊不了,也獲取不到配置!!!
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);}
}