基於 Nacos 來一篇關於微服務的設定中心方案 Demo。
Nacos 是開源的,同時,阿里雲也有付費的關於它的服務,公司剛好是依託阿里雲的服務體系,所以,使用它作為設定中心的可能性還是很大的,所以,基於它,來了一個範例。
1. 環境如何搭建
它的環境相對還是比較複雜的,需要有 Docker 服務和測試的 Demo 服務,以及它還需要相應的 Mysql 資料庫:
- Docker 提供 Nacos 服務
- WebDemo
- 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. 增加相應的設定資訊

- 第一,就是我們要增加的設定選單
- 第二,就是相應的命名空間
- 第三,就是需要的具體設定
其中我新增了一個 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 位址
- github :https://github.com/kesshei/NacosConfigDemo.git
- gitee : https://gitee.com/kesshei/NacosConfigDemo.git