Nacosベースのマイクロサービス設定センターのデモについて説明します。
Nacosはオープンソースであり、同時にAlibaba Cloudでは有料のサービスも提供しています。当社はAlibaba Cloudのサービス体系に依存しているため、これを設定センターとして使用する可能性が高いです。そこで、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
サービスが正常に動作しているか確認するには、ブラウザで http://localhost:8848/nacos/#/login にアクセスします。

これでプラットフォームにログインして内容を確認できます。
初期ユーザー名とパスワードはどちらも nacos です。
4. 設定情報の追加

- 最初に、設定を追加するメニュー
- 次に、対応する名前空間
- 最後に、必要な具体的な設定
ここでは Test という名前空間を追加しました。

そして、各名前空間に以下の2つの設定を追加しました。


5. 新しいWebAPIプロジェクトの作成
デフォルトのwebapiプロジェクトを作成し、以下のNuGetパッケージを導入します。
nacos-sdk-csharp.AspNetCore
さらに、デフォルトのProgram.csを以下のように変更します。
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上の設定情報を動的に変更します。

その後、再度クエリして最新の情報が反映されているか確認します。
最新の設定に更新されており、コンソールにも最新の設定が反映されていることが確認できました。


この設定センターは非常に使いやすいと言えます。