温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

在.NET Core中怎么读取Nacos配置的原生方法

发布时间:2021-03-08 16:28:34 来源:亿速云 阅读:450 作者:TREX 栏目:开发技术

本篇内容介绍了“在.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控制台进行配置的维护。

配置使用

新建一个配置

在.NET Core中怎么读取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里面提供的最原始的,原汁原味。

启动访问这个接口,可以看到下面的输出。

在.NET Core中怎么读取Nacos配置的原生方法

在控制台修改这个配置。

在.NET Core中怎么读取Nacos配置的原生方法

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

在.NET Core中怎么读取Nacos配置的原生方法

之所以IOptions没有获取到最新的配置,那是因为它的默认实现不会进行更新操作,也就是从启动到结束,它都是不会变的。

在有配置变更的情景,请尽可能不要用IOptions,用IOptionsSnapshotIOptionsMonitor来替代!

总结

“在.NET Core中怎么读取Nacos配置的原生方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI