微服務 配置中心 nacos .net 5

微服務 配置中心 nacos .net 5

基於nacos來一篇關於微服務的配置中心方案demo。

最后更新 2022/5/17 下午10:14
蓝创精英团队
预计阅读 4 分钟
分类
.NET
标签
.NET C# 架構設計 Web API

基於 nacos 來一篇關於微服務的配置中心方案 demo。

nacos 是開源的,同時,阿里雲也有收費的關於它的服務,公司剛好是依託阿里雲的服務體系,所以,使用它作為配置中心的可能性還是很大的,所以,基於它,來了一個示例。

1. 環境如何搭建

它的環境相對還是比較複雜的,需要有 docker 服務和測試的 demo 服務,以及它還需要相應的 mysql 資料庫:

  1. docker 提供 nacos 服務
  2. WebDemo
  3. mysql 需要的指定資料庫

2. 獲取官網的表結構

c#的官方示例地址是: https://github.com/nacos-group/nacos-sdk-csharp

官方提供的地址在這裡 :https://github.com/alibaba/nacos.git

sql 會在 nacos\distribution\conf\nacos-mysql.sql

我這邊項目里會提供需要的 sql。

我這邊插入指定的腳本,就 ok,前提是你要有這個庫。

最後看到會有以下這些表

3. 啟動 docker 服務

我這邊默認是使用 docker desktop,直接輸入命令就搞定了。

如果你也使用這種 docker,那麼,你可以參考我之前關於 docker 相關的文章即可.

docker run --name nacos  -d -p 8848:8848 ^
-e MODE=standalone ^
-e MYSQL_SERVICE_HOST=192.168.1.8 ^
-e MYSQL_SERVICE_DB_NAME=nacos_config ^
-e MYSQL_SERVICE_PORT=3306 ^
-e MYSQL_SERVICE_USER=root ^
-e MYSQL_SERVICE_PASSWORD=123456 ^
nacos/nacos-server

如何判斷服務是否 ok

可以遊覽器訪問 http://localhost:8848/nacos/#/login 地址

這樣的話,我們就可以登錄平台上看看有啥子了

初始的用戶名和密碼都是 nacos

4. 增加相應的配置信息

  1. 第一,就是我們要增加的配置菜單
  2. 第二,就是相應的命名空間
  3. 第三,就是需要的具體的配置

其中我新增了一個 test 的命名空間

然後,在每個裡面增加了兩個配置如下

5. 新建一個 webapi 項目

新建一個默認的 webapi 項目,然後引入以下 nuget 包即可

nacos-sdk-csharp.AspNetCore

另外需要修改默認 program 這個地方為以下配置

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })
        .ConfigureAppConfiguration((context, builder) =>
        {
            var c = builder.Build();

            // read configuration from config files
            // it will use default json parser to parse the configuration store in nacos server.
            builder.AddNacosV2Configuration(c.GetSection("NacosConfig"));
            // you also can specify ini or yaml parser as well.
            // builder.AddNacosV2Configuration(c.GetSection("NacosConfig"), Nacos.IniParser.IniConfigurationStringParser.Instance);
            // builder.AddNacosV2Configuration(c.GetSection("NacosConfig"), Nacos.YamlParser.YamlConfigurationStringParser.Instance);
        });

還需要注意的就是 最重要的配置文件(appsettings.json)了如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "NacosConfig": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "conn",
        "Group": "DEFAULT_GROUP"
      },
      {
        "Optional": false,
        "DataId": "other",
        "Group": "DEFAULT_GROUP"
      }
    ],
    "Tenant": "1806893a-7997-4657-9325-d4294fbf0f4a",
    "ServerAddresses": ["http://192.168.1.8:8848/"],
    "UserName": "nacos",
    "Password": "nacos",
    "ConfigUseRpc": false,
    "NamingUseRpc": false
  }
}

其中 tenant 為指定配置中心命名空間的 id,另外就是 listeners 的是這個命名空間下的配置的 data id。

必須要有 configuserpc 和 naminguserpc 這 2 個參數,若用的是 http 協議,則都是 false ,若用 grpc 協議則為 true.(不寫會報錯)

為了增加演示效果,我這裡修改了默認的控制器方法為讀取指定的配置

private readonly IConfiguration _configuration;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
    _logger = logger;
    _configuration = configuration;
}

public IActionResult Index(string key)
{
    if (string.IsNullOrWhiteSpace(key))
    {
        return Content("key is empty!");
    }
    return Content(_configuration[key]);
}

啟動後效果

訪問 http://localhost:38889/home? key=mysql 地址如下

訪問 http://localhost:38889/home? key=other 地址如下

訪問 http://localhost:38889/home? key=redis 地址如下

可見已經能全部查到相應的配置信息了

這個時候,我動態修改 nacos 上的配置信息

然後,在查詢一下看看是不是最新的

發現已經是最新的,並且,控制台也直接更新為最新的配置了

可見這個配置中心也挺好用的

6. 最後奉上 github 地址

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2024/1/19

基於 .net 的 fluentvalidation 驗證教程

fluentvalidation 是一個基於 .net 開發的驗證框架,開源免費,而且優雅,支持鏈式操作,易於理解,功能完善,還是可與 mvc5、webapi2 和 asp.net core 深度集成,組件內提供十幾種常用驗證器,可擴展性好,支持自定義驗證器,支持本地化多語言。

继续阅读