マイクロサービス 設定センター Nacos .NET 5

マイクロサービス 設定センター Nacos .NET 5

Nacosを使用した、マイクロサービスの設定センターに関するデモソリューションの記事。

最終更新 2022/05/17 22:14
蓝创精英团队
読了目安 3 分
カテゴリ
.NET
タグ
.NET C# アーキテクチャ設計 Web API

Nacosベースのマイクロサービス設定センターのデモについて説明します。

Nacosはオープンソースであり、同時にAlibaba Cloudでは有料のサービスも提供しています。当社はAlibaba Cloudのサービス体系に依存しているため、これを設定センターとして使用する可能性が高いです。そこで、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

サービスが正常に動作しているか確認するには、ブラウザで http://localhost:8848/nacos/#/login にアクセスします。

これでプラットフォームにログインして内容を確認できます。

初期ユーザー名とパスワードはどちらも nacos です。

4. 設定情報の追加

  1. 最初に、設定を追加するメニュー
  2. 次に、対応する名前空間
  3. 最後に、必要な具体的な設定

ここでは 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です。

ConfigUseRpcNamingUseRpc の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アドレス

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2024/01/19

.NET ベースの FluentValidation 検証チュートリアル

FluentValidationは、.NETベースの検証フレームワークで、オープンソースかつ無料、そしてエレガントです。チェーン操作をサポートし、理解しやすく、機能が充実しています。さらに、MVC5、WebApi2、ASP.NET Coreと深く統合でき、コンポーネント内には十数種類の一般的なバリデーターが用意されており、拡張性が高く、カスタムバリデーターをサポートし、ローカライズ多言語にも対応しています。

続きを読む
同じカテゴリ / 同じタグ 2023/01/11

gRPC入門と実践(.NET編)

長らく、フロントエンドとバックエンドのやり取りにはWebApi + JSON方式を使用し、バックエンドサービス間の呼び出しも同様でした

続きを読む