在.NET Core中用最原生的方式读取Nacos的配置方法(推荐)
 更新时间:2020年04月26日 09:02:40   作者:GuangZhou  

这篇文章主要介绍了在.NET Core中用最原生的方式读取Nacos的配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

背景
之前老黄写过一篇《ASP.NET Core结合Nacos来完成配置管理和服务发现》简单介绍了如何让.NET Core程序接入Nacos,之前的SDK里面更多的是对Nacos的Open API进行了封装以及对服务注册和发现的封装。
配置这一块当时并没有过多的处理,用起来有时感觉不会特别顺手,所以将它和.NET Core的配置结合起来了,让它用起来更简便。
怎么个简便法呢?
可以说,除了多添加一下provider,其他的操作都是和最原始的一模一样,你想用IConfiguration就用IConfiguration,想用IOptions系列就用IOptions系列。
更容易做到无缝迁移!
当然,这个SDK出自老黄的手,难免会有一些坑和bug,这个就请各位多多包涵!!
前提条件
启动Nacos Server
最简单的方式,用docker启动一个单机版的。

docker-compose -f example/standalone-mysql-8.yaml up

创建一个.NET Core项目,并安装相应nuget包
这里将用ASP.NET Core Web Api做示例,同时要安装下面的nuget包

dotnet add package nacos-sdk-csharp-unofficial.Extensions.Configuration –version 0.2.6

更直接点,直接修改csproj

<ItemGroup>
<PackageReference Include=”nacos-sdk-csharp-unofficial.Extensions.Configuration” Version=”0.2.6″ />
</ItemGroup>

进行配置
打开Program.cs,在CreateHostBuilder加入Nacos的provider配置,都是Nacos的一些基础配置。

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的配置写进去,主要是用来区分不同环境的配置来源。

{
“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相关的内容就结束了。接下来,要做的就是在nacos控制台进行配置的维护。
配置使用
新建一个配置

添加一个对应的实体类

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; }
}

因为要验证IOptions模式,所以要在Startup中加点代码

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”;
}
}

从上面的代码,看上去应该熟悉的不能再熟悉了吧!这些配置的用法,就是.NET Core里面提供的最原始的,原汁原味。
启动访问这个接口,可以看到下面的输出。

在控制台修改这个配置。

再次访问,可以发现,除了IOptions之外,都读取到了新的配置。

之所以IOptions没有获取到最新的配置,那是因为它的默认实现不会进行更新操作,也就是从启动到结束,它都是不会变的。
在有配置变更的情景,请尽可能不要用IOptions,用IOptionsSnapshot和IOptionsMonitor来替代!
总结
这里介绍了如何让.NET Core更容易对接Nacos配置的方法,希望对各位有所帮助。
到此这篇关于在.NET Core中用最原生的方式读取Nacos的配置的文章就介绍到这了,更多相关.NET Core读取Nacos的配置内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:SpringBoot集成Nacos的详细教程基于Nacos实现Spring Cloud Gateway实现动态路由的方法Spring Cloud Alibaba Nacos Config配置中心实现SpringCloud-Alibaba-Nacos启动失败解决方案springboot集成nacos的配置方法Springcloud seata nacos环境搭建过程图解spring cloud alibaba Nacos 注册中心搭建过程详解Springcloud-nacos实现配置和注册中心的方法Nacos docker单机模式部署实现过程详解

.NET
Core
Nacos
配置

相关文章
Cookies的各方面知识(基础/高级)深度了解Cookies想必所有人都了解本文将围绕Cookies基础知识(什么是Cookies/Cookies如何传递/Cookies如何存储/Cookies如何查看)Cookies高级知识/Cookie的限制等等方方面面深入了解,感兴趣的朋友可以参考下,或许对你学习cookies有所帮助 2013-02-02
AntDesign Pro + .NET Core 实现基于JWT的登录认证功能这篇文章主要介绍了AntDesign Pro + .NET Core 实现基于JWT的登录认证功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 2021-03-03
asp.net上传文件到数据库的解决方案这篇文章主要介绍了ASP.NET上传文件到数据库,先从文字上了解一下上传文件到数据库的具体步骤,再从代码上来实现,需要的朋友可以参考下 2015-09-09
aspx中的mysql操作类sqldatasource使用示例分享服务器装了mysql odbc驱动,想在那个iis上操作另一个服务器的mysql,找到个.net的sqldatasource类可以操作mysql,下在把使用方法分享一下 2014-01-01
未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错这篇文章主要给大家介绍了关于未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的完美解决办法,需要的朋友可以参考下 2019-03-03
基于.net standard 的动态编译实现代码这篇文章主要介绍了基于.net standard 的动态编译实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 2018-07-07
asp.net core配置文件加载过程的深入了解这篇文章主要给大家介绍了关于asp.net core配置文件加载过程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2018-12-12
SqlCommandBuilder如何实现批量更新这篇文章主要介绍了SqlCommandBuilder如何实现批量更新,需要的朋友可以参考下 2015-10-10
asp.net 数据访问层基类阿楠收集自网络,打包下载,以下只截取其中一部分代码。 2009-03-03
ASP.NET2.0中数据源控件之异步数据访问ASP.NET2.0中数据源控件之异步数据访问… 2006-09-09

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。