在.NET Core中用最原生的方式讀取Nacos的配置方法(推薦)
背景
之前老黃寫過一篇《ASP.NET Core結(jié)合Nacos來完成配置管理和服務(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í)并沒有過多的處理,用起來有時(shí)感覺不會(huì)特別順手,所以將它和.NET Core的配置結(jié)合起來了,讓它用起來更簡(jiǎn)便。
怎么個(gè)簡(jiǎn)便法呢?
可以說,除了多添加一下provider,其他的操作都是和最原始的一模一樣,你想用IConfiguration就用IConfiguration,想用IOptions系列就用IOptions系列。
更容易做到無縫遷移!
當(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)行配置
打開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的配置寫進(jìn)去,主要是用來區(qū)分不同環(huán)境的配置來源。
{
"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é)束了。接下來,要做的就是在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)訪問這個(gè)接口,可以看到下面的輸出。

在控制臺(tái)修改這個(gè)配置。

再次訪問,可以發(fā)現(xiàn),除了IOptions之外,都讀取到了新的配置。

之所以IOptions沒有獲取到最新的配置,那是因?yàn)樗哪J(rèn)實(shí)現(xiàn)不會(huì)進(jìn)行更新操作,也就是從啟動(dòng)到結(jié)束,它都是不會(huì)變的。
在有配置變更的情景,請(qǐng)盡可能不要用IOptions,用IOptionsSnapshot和IOptionsMonitor來替代!
總結(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)境搭建過程圖解
- spring cloud alibaba Nacos 注冊(cè)中心搭建過程詳解
- Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法
- Nacos docker單機(jī)模式部署實(shí)現(xiàn)過程詳解
相關(guān)文章
Aspose.Cells 讀取受保護(hù)有密碼的Excel文件
這篇文章主要介紹了Aspose.Cells 讀取受保護(hù)有密碼的Excel文件,簡(jiǎn)單實(shí)用,需要的朋友可以參考下。2016-06-06
IIS處理Asp.net請(qǐng)求和Asp.net頁(yè)面生命周期詳細(xì)說明
ASP.NET 頁(yè)運(yùn)行時(shí),此頁(yè)將經(jīng)歷一個(gè)生命周期,在生命周期中將執(zhí)行一系列處理步驟。這些步驟包括初始化、實(shí)例化控件、還原和維護(hù)狀態(tài)、運(yùn)行事件處理程序代碼以及進(jìn)行呈現(xiàn)2012-01-01
ASP.NET也像WinForm程序一樣運(yùn)行的實(shí)現(xiàn)方法
我們今天要談到的是讓ASP.NET的程序也像WinForm一樣的運(yùn)行,這樣就不需要安裝IIS或者Visual Studio這樣的特定環(huán)境了2012-01-01
Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)2018-09-09
把ASP.NET MVC項(xiàng)目部署到本地IIS上的完整步驟
最近會(huì)經(jīng)常修改一些網(wǎng)站前端的內(nèi)容,為了方便跟UI和產(chǎn)品交流,需要將自己修改過的頁(yè)面及時(shí)發(fā)布到測(cè)試機(jī)或者是本地的IIS上。下面這篇文章主要給大家介紹了關(guān)于如何把ASP.NET MVC項(xiàng)目部署到本地IIS上的相關(guān)資料,需要的朋友可以參考下2018-06-06
visual studio 2012安裝配置方法圖文教程 附opencv配置教程
這篇文章主要為大家分享了visual studio 2012安裝配置方法圖文教程,文中附opencv配置教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05

