ASP.NET Core使用Nacos做爲配置中心的多環境問題

前言

雙11那天離職後,這段時間都待在家裏,看看書,寫寫代碼,逛逛招聘網站html

週一去Gworld面試的時候,有聽到面試官說他們用到了配置中心Apollo,聊下來,聽他的意思,大概是處理了多環境這個比較方便。git

因而乎就有了這篇短文,來簡單談談Nacos作爲配置中心時,怎麼應對多環境的問題。github

如今比較流行的配置中心,說來講去,聽的比較多的也就下面幾個:面試

  • Apollo
  • Spring Config
  • Nacos
  • consul
  • etcd

嚴格意義上說,只要是支持KV的,均可以作爲配置中心來耍,看你對它的需求有多少。json

下面就來簡單看看用Nacos來作配置中心的多環境問題。app

多環境問題

當咱們全部的環境都共用一套配置中心的時候,最讓咱們苦惱的問題應該是要怎麼樣去隔離這些不一樣的環境!微服務

在Nacos中,推薦的作法是用NameSpace來區分。網站

首先要爲每一個環境建一個命名空間,用做區分的標識。ui

能夠考慮用應用名.環境名的形式,只要統一就好。spa

爲了演示,往每一個命名空間都加一個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

參考資料

相關文章
相關標籤/搜索