基於 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