热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

在.NETCore中用最原生的方式读取Nacos的配置方法(推荐)

这篇文章主要介绍了在.NETCore中用最原生的方式读取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


  

进行配置

打开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("nacosconfig:DataId");
         var group = c.GetValue("nacosconfig:Group");
         var tenant = c.GetValue("nacosconfig:Tenant");
         var optiOnal= c.GetValue("nacosconfig:Optional");
         var serverAddresses = c.GetSection("nacosconfig:ServerAddresses").Get>();
                
         // 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();
      });

同样的,我们还要修改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 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(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 options,
    IOptionsSnapshot sOptions,
    IOptionsMonitor _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,用IOptionsSnapshotIOptionsMonitor来替代!

总结

这里介绍了如何让.NET Core更容易对接Nacos配置的方法,希望对各位有所帮助。

到此这篇关于在.NET Core中用最原生的方式读取Nacos的配置的文章就介绍到这了,更多相关.NET Core读取Nacos的配置内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 达人评测 酷睿i5 12450h和锐龙r7 5800h选哪个好 i512450h和r75800h对比
    本文介绍了达人评测酷睿i5 12450h和锐龙r7 5800h选哪个好的相关知识,包括两者的基本配置和重要考虑点。希望对你在选择时提供一定的参考价值。 ... [详细]
author-avatar
living_ren
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有