ASP.NET Core使用Nacos作为配置中心的多环境问题
前言
双11那天离职后,这段时间都待在家里,看看书,写写代码,逛逛招聘网站
周一去Gworld面试的时候,有听到面试官说他们用到了配置中心Apollo,聊下来,听他的意思,大概是处理了多环境这个比较方便。
于是乎就有了这篇短文,来简单谈谈Nacos做为配置中心时,怎么应对多环境的问题。
现在比较流行的配置中心,说来说去,听的比较多的也就下面几个:
- Apollo
- Spring Config
- Nacos
- consul
- etcd
严格意义上说,只要是支持KV的,都可以做为配置中心来耍,看你对它的需求有多少。
下面就来简单看看用Nacos来做配置中心的多环境问题。
多环境问题
当我们所有的环境都共用一套配置中心的时候,最让我们苦恼的问题应该是要怎么样去隔离这些不同的环境!
在Nacos中,推荐的做法是用NameSpace来区分。
首先要为每个环境建一个命名空间,用作区分的标识。

可以考虑用应用名.环境名的形式,只要统一就好。
为了演示,往每个命名空间都加一个test的配置,对应的值是环境名。

下面要做的就是在不同环境的配置文件中指定对应的命名空间,这里要用那个命名空间ID。
调整配置文件如下:

然后在Startup中直接读取。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddNacos(Configuration);
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
var nacosConfigClient = app.ApplicationServices.GetRequiredService<Nacos.INacosConfigClient>();
var val = nacosConfigClient.GetConfigAsync(new Nacos.GetConfigRequest
{
DataId = "test"
}).GetAwaiter().GetResult();
Console.WriteLine($"==={env.EnvironmentName}==={val}===");
// ....
}
}
由于这里是不同环境不同的配置文件,在启动命令上面指定环境即可。
dotnet xxx.dll --environment=Test
这里的环境就要和json文件的中间那部分一致了。当然也可以从环境变量中指定,方式很多,大家随便选。
下面是在三个不同环境,读出来不同的配置内容。



其实到这一步,我们已经在同一个配置中心里面,将应用的不同环境隔离开了。
本文的示例代码:
参考资料
ASP.NET Core使用Nacos作为配置中心的多环境问题的更多相关文章
- Nacos系列:基于Nacos的配置中心
前言 在看正文之前,我想请你回顾一下自己待过的公司都是怎么管理配置的,我想应该会有以下几种方式: 1.硬编码 没有什么配置不配置的,直接写在代码里面,比如使用常量类 优势:对开发友好,开发清楚地知道代 ...
- Asp.net Core + Log4net + ELK 搭建日志中心
原文:Asp.net Core + Log4net + ELK 搭建日志中心 Docker中一键安装ELK 对于这种工具类的东西,第一步就直接到docker的hub中查找了,很幸运,不仅有Elasti ...
- .NET Core 下使用 Apollo 配置中心
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景.服务 ...
- 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之三 —— 配置
==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...
- Nacos(四):SpringCloud项目中接入Nacos作为配置中心
前言 通过前两篇文章: Nacos(二):Nacos与OpenFeign的对接使用 Nacos(三):SpringCloud项目中接入Nacos作为注册中心 相信大家已经对Nacos作为注册中心的基本 ...
- [ASP.NET Core 3框架揭秘] 配置[1]:读取配置数据[上篇]
提到"配置"二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...
- [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]
[接上篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义 ...
- [ASP.NET Core 3框架揭秘] 配置[5]:配置数据与数据源的实时同步
在<配置模型总体设计>介绍配置模型核心对象的时候,我们刻意回避了与配置同步相关的API,现在我们利用一个独立文章来专门讨论这个话题.配置的同步涉及到两个方面:第一,对原始的配置源实施监控并 ...
- [ASP.NET Core 3框架揭秘] 配置[3]:配置模型总体设计
在<读取配置数据>([上篇],[下篇])上面一节中,我们通过实例的方式演示了几种典型的配置读取方式,接下来我们从设计的维度来重写认识配置模型.配置的编程模型涉及到三个核心对象,分别通过三个 ...
随机推荐
- Python生成requirements.txt方法
在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及版本号,其作用是用来在另一个环境上重新构建项目所需要的运行环境依赖. require ...
- java.lang.IllegalStateException: getOutputStream() has already been called 解决办法
因为在使用的时候没有使用@ResponseBody这个注解,所以才会报上面的异常
- Java连载55-接口的作用、接口举例
一.接口的作用 1.可以使项目分层,所有层都面向接口开发,开发效率提高了. 2.接口使代码和代码之间的耦合度降低,就像内存条和主板的关系,变得“可插拔”,可以随意切换. 总结:接口和抽象类能够完成某 ...
- Linux 部署MySQL 一主一从一备
主服务器搭建 准备三台服务器,一主一从一备 在主服务器(master)下找到mysql配置文件. Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server ...
- 【Java基础】JDBC简明教程
目录 1. 常用类 2. JDBC编程步骤 3. 事务处理 4. 数据库连接池 5. JDBC列子代码 6. 使用Apache的JDBC工具类 虽然在平时的开发过程中我们不会直接使JDBC的API来操 ...
- Python 接口自动化常用方法封装
#!/usr/bin/env python # -*- coding:utf-8 -*- # ************************************* # @Time : 2019/ ...
- 关于scrapy中如何区分是接着发起请求还是开始保存文件
一.区分 根据yield迭代器生成的对象是request对象还是item对象 二.item 1.配置tem对象 在items.py文件中设置类 class MyscrapyItem(scrapy.It ...
- Raspberry Pi (树莓派) 更换源 - stretch 版本
Raspberry Pi 默认更新源访问速度慢,更换国内源速度提升.更换软件更新源 (/etc/apt/sources.list),更换系统更新源 (/etc/apt/sources.d/raspi. ...
- TypeScript 学习笔记(四)
函数: 1.函数是一组一起执行一个任务的语句 2.我们可以把一段可复用的代码放到一起组成函数,从而提高效率 3.函数声明(通过关键字 function 来声明)告诉编译器函数的名称.返回类型和参数 4 ...
- RMAN DUPLICATE DATABASE with SET NEWNAME failed: RMAN-05501 RMAN-05517 (Doc ID 387093.1)
RMAN DUPLICATE DATABASE with SET NEWNAME failed: RMAN-05501 RMAN-05517 (Doc ID 387093.1) APPLIES TO: ...