在.NET Core中用最原生的方式讀取Nacos的配置方法(推薦)
背景
之前老黃寫(xiě)過(guò)一篇《ASP.NET Core結(jié)合Nacos來(lái)完成配置管理和服務(wù)發(fā)現(xiàn)》簡(jiǎn)單介紹了如何讓.NET Core程序接入Nacos,之前的SDK里面更多的是對(duì)Nacos的Open API進(jìn)行了封裝以及對(duì)服務(wù)注冊(cè)和發(fā)現(xiàn)的封裝。
配置這一塊當(dāng)時(shí)并沒(méi)有過(guò)多的處理,用起來(lái)有時(shí)感覺(jué)不會(huì)特別順手,所以將它和.NET Core的配置結(jié)合起來(lái)了,讓它用起來(lái)更簡(jiǎn)便。
怎么個(gè)簡(jiǎn)便法呢?
可以說(shuō),除了多添加一下provider,其他的操作都是和最原始的一模一樣,你想用IConfiguration
就用IConfiguration
,想用IOptions
系列就用IOptions
系列。
更容易做到無(wú)縫遷移!
當(dāng)然,這個(gè)SDK出自老黃的手,難免會(huì)有一些坑和bug,這個(gè)就請(qǐng)各位多多包涵!!
前提條件
啟動(dòng)Nacos Server
最簡(jiǎn)單的方式,用docker啟動(dòng)一個(gè)單機(jī)版的。
docker-compose -f example/standalone-mysql-8.yaml up
創(chuàng)建一個(gè).NET Core項(xiàng)目,并安裝相應(yīng)nuget包
這里將用ASP.NET Core Web Api做示例,同時(shí)要安裝下面的nuget包
dotnet add package nacos-sdk-csharp-unofficial.Extensions.Configuration --version 0.2.6
更直接點(diǎn),直接修改csproj
<ItemGroup> <PackageReference Include="nacos-sdk-csharp-unofficial.Extensions.Configuration" Version="0.2.6" /> </ItemGroup>
進(jìn)行配置
打開(kāi)Program.cs
,在CreateHostBuilder
加入Nacos的provider配置,都是Nacos的一些基礎(chǔ)配置。
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, builder) => { var c = builder.Build(); var dataId = c.GetValue<string>("nacosconfig:DataId"); var group = c.GetValue<string>("nacosconfig:Group"); var tenant = c.GetValue<string>("nacosconfig:Tenant"); var optional = c.GetValue<bool>("nacosconfig:Optional"); var serverAddresses = c.GetSection("nacosconfig:ServerAddresses").Get<List<string>>(); // 0.2.6版本之前,只支持這種方式 builder.AddNacosConfiguration(x => { x.DataId = dataId; x.Group = group; x.Tenant = tenant; x.Optional = optional; x.ServerAddresses = serverAddresses; }); //// 0.2.6版本之后可以從配置文件讀取Nacos的基本配置 //builder.AddNacosConfiguration(c.GetSection("nacosconfig")); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
同樣的,我們還要修改appsettings.json
,把Nacos的配置寫(xiě)進(jìn)去,主要是用來(lái)區(qū)分不同環(huán)境的配置來(lái)源。
{ "Logging": { "LogLevel": { "Default": "Warning", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime" :"Information" } }, "nacosconfig":{ "Optional": false, "DataId": "msconfigapp", "Group": "", "Tenant": "ca31c37e-478c-46ed-b7ea-d0ebaa080221", "ServerAddresses": ["localhost:8848"] } }
好了,到這里,用于配置Nacos相關(guān)的內(nèi)容就結(jié)束了。接下來(lái),要做的就是在nacos控制臺(tái)進(jìn)行配置的維護(hù)。
配置使用
新建一個(gè)配置
添加一個(gè)對(duì)應(yīng)的實(shí)體類
public class AppSettings { public string Str { get; set; } public int Num { get; set; } public List<int> Arr { get; set; } public SubObj SubObj { get; set; } } public class SubObj { public string a { get; set; } }
因?yàn)橐?yàn)證IOptions模式,所以要在Startup
中加點(diǎn)代碼
public void ConfigureServices(IServiceCollection services) { services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); services.AddControllers(); }
下面就是真正的使用了!
[ApiController] [Route("api/[controller]")] public class ConfigController : ControllerBase { private readonly IConfiguration _configuration; private readonly AppSettings _settings; private readonly AppSettings _sSettings; private readonly AppSettings _mSettings; public ConfigController( IConfiguration configuration, IOptions<AppSettings> options, IOptionsSnapshot<AppSettings> sOptions, IOptionsMonitor<AppSettings> _mOptions ) { _configuration = configuration; _settings = options.Value; _sSettings = sOptions.Value; _mSettings = _mOptions.CurrentValue; } [HttpGet] public string Get() { string id = Guid.NewGuid().ToString("N"); Console.WriteLine($"============== begin {id} ====================="); var conn = _configuration.GetConnectionString("Default"); Console.WriteLine($"{id} conn = {conn}"); var version = _configuration["version"]; Console.WriteLine($"{id} version = {version}"); var str1 = Newtonsoft.Json.JsonConvert.SerializeObject(_settings); Console.WriteLine($"{id} IOptions = {str1}"); var str2 = Newtonsoft.Json.JsonConvert.SerializeObject(_sSettings); Console.WriteLine($"{id} IOptionsSnapshot = {str2}"); var str3 = Newtonsoft.Json.JsonConvert.SerializeObject(_mSettings); Console.WriteLine($"{id} IOptionsMonitor = {str3}"); Console.WriteLine($"==============================================="); return "ok"; } }
從上面的代碼,看上去應(yīng)該熟悉的不能再熟悉了吧!這些配置的用法,就是.NET Core里面提供的最原始的,原汁原味。
啟動(dòng)訪問(wèn)這個(gè)接口,可以看到下面的輸出。
在控制臺(tái)修改這個(gè)配置。
再次訪問(wèn),可以發(fā)現(xiàn),除了IOptions
之外,都讀取到了新的配置。
之所以IOptions
沒(méi)有獲取到最新的配置,那是因?yàn)樗哪J(rèn)實(shí)現(xiàn)不會(huì)進(jìn)行更新操作,也就是從啟動(dòng)到結(jié)束,它都是不會(huì)變的。
在有配置變更的情景,請(qǐng)盡可能不要用IOptions
,用IOptionsSnapshot
和IOptionsMonitor
來(lái)替代!
總結(jié)
這里介紹了如何讓.NET Core更容易對(duì)接Nacos配置的方法,希望對(duì)各位有所幫助。
到此這篇關(guān)于在.NET Core中用最原生的方式讀取Nacos的配置的文章就介紹到這了,更多相關(guān).NET Core讀取Nacos的配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot集成Nacos的詳細(xì)教程
- 基于Nacos實(shí)現(xiàn)Spring Cloud Gateway實(shí)現(xiàn)動(dòng)態(tài)路由的方法
- Spring Cloud Alibaba Nacos Config配置中心實(shí)現(xiàn)
- SpringCloud-Alibaba-Nacos啟動(dòng)失敗解決方案
- springboot集成nacos的配置方法
- Springcloud seata nacos環(huán)境搭建過(guò)程圖解
- spring cloud alibaba Nacos 注冊(cè)中心搭建過(guò)程詳解
- Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法
- Nacos docker單機(jī)模式部署實(shí)現(xiàn)過(guò)程詳解
相關(guān)文章
Visual Studio Debug實(shí)戰(zhàn)教程之?dāng)帱c(diǎn)操作
眾所周知斷點(diǎn)對(duì)于Visual Studio調(diào)試過(guò)程是十分重要的,斷點(diǎn)的設(shè)置也是為了更好的進(jìn)行調(diào)試。下面這篇文章主要給大家介紹了關(guān)于Visual Studio Debug實(shí)戰(zhàn)教程之?dāng)帱c(diǎn)操作的相關(guān)資料,需要的朋友可以參考下2018-09-09asp.net 中國(guó)身份證號(hào)碼驗(yàn)證代碼 非正則
asp.net 中國(guó)身份證號(hào)碼驗(yàn)證,需要的朋友可以參考下。2009-11-11asp.net gridview多頁(yè)時(shí)的批量刪除
多余的代碼我就不貼了,有段時(shí)間沒(méi)寫(xiě).net了,最近又開(kāi)始寫(xiě)了,結(jié)果就一個(gè)gridview含多頁(yè)的批量刪除弄了我很久。貼上代碼,忘記再看下:2008-07-07asp.net后臺(tái)動(dòng)態(tài)添加JS文件和css文件的引用實(shí)現(xiàn)方法
這篇文章主要介紹了asp.net后臺(tái)動(dòng)態(tài)添加JS文件和css文件的引用實(shí)現(xiàn)方法,是非常簡(jiǎn)單實(shí)用的技巧,需要的朋友可以參考下2014-09-09ASP.NET使用Subtract方法獲取兩個(gè)日期之間的天數(shù)
本節(jié)主要介紹了ASP.NET使用Subtract方法獲取兩個(gè)日期之間的天數(shù),需要的朋友可以參考下2014-08-08微信公眾平臺(tái)開(kāi)發(fā)教程(二) 基本原理及消息接口總結(jié)
本篇文章主要介紹了微信公眾平臺(tái)開(kāi)發(fā)教程(二) 基本原理及消息接口,具有一定的參考價(jià)值,有興趣的朋友可以了解一下。2016-12-12asp.net無(wú)法加載oci.dll等錯(cuò)誤的解決方法
.net在windows2003下訪問(wèn)oracle9i提示“無(wú)法加載oci.dll”或"無(wú)法在dll oci.dll中找到名為ocienvcreate的入口點(diǎn) "的修復(fù)方法2013-10-10ASP.NET MVC 4 中的JSON數(shù)據(jù)交互的方法
本篇文章主要介紹了ASP.NET MVC 4 中的JSON數(shù)據(jù)交互的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04