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文件的中間那部分一致了。當然也可以從環境變量中指定,方式很多,大家隨便選。

下面是在三個不同環境,讀出來不同的配置內容。

其實到這一步,我們已經在同一個配置中心里面,將應用的不同環境隔離開了。

本文的示例代碼:

NacosConfigSample

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM