前言
雙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文件的中間那部分一致了。當然也可以從環境變量中指定,方式很多,大家隨便選。
下面是在三個不同環境,讀出來不同的配置內容。
其實到這一步,我們已經在同一個配置中心里面,將應用的不同環境隔離開了。
本文的示例代碼: