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文件的中间那部分一致了。当然也可以从环境变量中指定,方式很多,大家随便选。
下面是在三个不同环境,读出来不同的配置内容。
其实到这一步,我们已经在同一个配置中心里面,将应用的不同环境隔离开了。
本文的示例代码:
参考资料

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架