有梦想的鱼
写代码我得再认真点,当我最终放下键盘时,我实在不想仍有太多疑惑
1.什么是配置中心?

例如在Net Framwork中web.config、Winform中的app.config 以及Net Core下的appsettings.json 这些都是应用程序的配置文件,配置的作用其实简单来说,就是用来动态修改程序执行状态的一种机制。

  • 那么什么是配置中心呢?

    • 其实配置中心常用在微服务架构中,微服务为了高并发、高可用通常是采用多实例、集群部署我们先思考一个问题,每个微服务实例都有一个配置文件,那么多个微服务实例是不是有多个相同配置文件,夸张一点(我们排除掉各种环境不同的配置这一个点)
  • 假设我们有50个微服务运行在不同的服务器上,我们某天需要修改其中某个微服务的配置项该怎么做?

    • 通常我能想到的是修改一个配置文件,然后复制粘贴到每个微服务中去,或者最坏的做法就是一个一个改,我如果这样,最起码要花费半天时间,而且不一定对

所以我们会想到,我们将所有的配置文件合成一个,放在某个目录,然后所有的服务都访问这个目录下的配置是不是也可行呢?思路没错,确实是这样,针对这个思想有了配置中心的诞生,它主要解决了如下问题:

  1. 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏。
  2. 时效性:修改配置,需要重启服务才能生效。
  3. 局限性:无法支持动态调整:例如日志开关、功能开关。

其实最重要的一点莫过于省事,正确性,我只需要改一个地方就好了,所有的服务都可用,用专业的话说就是提高可维护性和生产力,从开始的半天时间,缩短到目前的1分钟。

2.常用的配置中心有哪些?

目前常用的配置中心有很多,例如

Spring Cloud Config

Apollo

Nacos

我们目前只介绍Nacos,是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
它是由阿里使用Java开发。随便打开Google、百度或者知乎,回答的都很全面。

其他的有机会后面会逐一介绍,首先记录下nacos中很小的一块,配置的基本使用,在开始学习一门技术的时候,目前首先是知道它是做什么的,怎么用,等在脑海中有了大概的概念、然后再深入研究其中的一些知识点,这样效率可能高一些。

3.如何使用Nacos
1.安装nacos

1.首先需要安装Nacos, 我们采用Docker部署的方式,因为windows太麻烦了,还要手动安装jdk

docker pull nacos/nacos-server

2.启动Nacos,端口8848映射内部端口也是8848

docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODE=hostname -e MODE=standalone nacos/nacos-server

3.访问http://localhost:8848/nacos进入Nacos主界面,账号密码都为nacos

2.配置nacos

4.点击添加配置文件,选择json,然后将项目中的appsettings.json拷贝到文本框中,点击发布

5.然后在应用程序中安装Nacos的.Net 驱动程序,Nuget下载 nacos-sdk-csharp.Extensions.Configuration

6.配置应用程序,在程序启动的Program类中添加nacos的配置

internal static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(build =>
        {
            build.AddJsonFile("appsettings.secrets.json", optional: true);
			//添加nacos配置,配置读取节点
            var configuration = build.Build();
            build.AddNacosV2Configuration(configuration.GetSection("Nacos"));
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })
        .UseAutofac()
        .UseSerilog();

7.在appsetting.json中加入Nacos配置节点

 "Nacos": {
    "Namespace": "", // Please set the value of Namespace ID !!!!!!!!
    "ServerAddresses": [ "http://localhost:8848/" ],
    "UserName": "nacos",
    "Password": "nacos",
    "AccessKey": "",
    "SecretKey": "",
    "ConfigUseRpc": false,
    "NamingUseRpc": false,
    "Listeners": [  
      {  //监听 支持热更新,多个监听在数组中加入多个对象
        "Optional": false,
        "DataId": "appsettings.json",
        "Group": "DEFAULT_GROUP"
      }]
}

8.在应用程序中注入 IConfiguration 接口就可以读取配置

 public IConfiguration _configuration { set; get; }

 [HttpGet("{id}")]
 public async Task<TestDto> GetAsync(Guid id)
 {
      //测试读取
      string nacosStr = _configuration["TestStr"];
      return await Task.FromResult(new TestDto());
 }

Nacos支持热更新,能接收到实时的变更或新增删除配置,主要的实现原理是发布订阅机制,我们只需要在配置中加入监听就可以了,如果一个项目中包含多个配置文件,最后一个配置会覆盖相同的配置,和注册顺序有关

posted on 2022-08-30 22:09  有梦想的鱼i  阅读(689)  评论(0编辑  收藏  举报