1.什么是配置中心?
例如在Net Framwork中web.config、Winform中的app.config 以及Net Core下的appsettings.json 这些都是应用程序的配置文件,配置的作用其实简单来说,就是用来
动态修改程序执行状态
的一种机制。
-
那么什么是配置中心呢?
- 其实配置中心常用在微服务架构中,微服务为了高并发、高可用通常是采用多实例、集群部署我们先思考一个问题,每个微服务实例都有一个配置文件,那么多个微服务实例是不是有多个相同配置文件,夸张一点(我们排除掉各种环境不同的配置这一个点)
-
假设我们有50个微服务运行在不同的服务器上,我们某天需要修改其中某个微服务的配置项该怎么做?
- 通常我能想到的是修改一个配置文件,然后复制粘贴到每个微服务中去,或者最坏的做法就是一个一个改,我如果这样,最起码要花费半天时间,而且不一定对
所以我们会想到,我们将所有的配置文件合成一个,放在某个目录,然后所有的服务都访问这个目录下的配置是不是也可行呢?思路没错,确实是这样,针对这个思想有了配置中心
的诞生,它主要解决了如下问题:
- 安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏。
- 时效性:修改配置,需要重启服务才能生效。
- 局限性:无法支持动态调整:例如日志开关、功能开关。
其实最重要的一点莫过于省事,正确性,我只需要改一个地方就好了,所有的服务都可用,用专业的话说就是提高可维护性和生产力,从开始的半天时间,缩短到目前的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支持热更新
,能接收到实时的变更或新增删除配置,主要的实现原理是发布订阅机制
,我们只需要在配置中加入监听就可以了,如果一个项目中包含多个配置文件,最后一个配置会覆盖相同的配置,和注册顺序有关