次の方法で共有


.NET Aspire RabbitMQ 統合

に含まれるもの:、ホスティング統合 および 、Client 統合

RabbitMQ は信頼性の高いメッセージングおよびストリーミング ブローカーであり、クラウド環境、オンプレミス、ローカル コンピューターに簡単にデプロイできます。 .NET Aspire RabbitMQ 統合を使用すると、既存の RabbitMQ インスタンスに接続したり、docker.io/library/rabbitmqを使用して から新しいインスタンスを作成したりできます。

ホスティング統合

RabbitMQ ホスティング統合は、RabbitMQ サーバーを RabbitMQServerResource の種類としてモデル化します。 この型とその API にアクセスするには、📦 プロジェクトに AspireRabbitMQ.Hosting. NuGet パッケージを追加します。

dotnet add package Aspire.Hosting.RabbitMQ

詳細については、「dotnet パッケージ の追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。

サーバー リソース RabbitMQ を追加する

アプリ ホスト プロジェクトで、AddRabbitMQ インスタンスの builder を呼び出して、RabbitMQ サーバー リソースを追加します。

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// After adding all resources, run the app...

.NET .NET Aspire 前の例に示すように、docker.io/library/rabbitmq イメージを使用してコンテナー イメージをアプリ ホストに追加すると、ローカル コンピューターに新しい RabbitMQ サーバー インスタンスが作成されます。 RabbitMQ サーバーへの参照 (rabbitmq 変数) が ExampleProjectに追加されます。 RabbitMQ サーバー リソースには、username"guest" としてのデフォルトの資格情報が含まれており、それは password メソッドを使用してランダムに生成された CreateDefaultPasswordParameter に基づいています。

WithReference メソッドは、ExampleProjectという名前の "messaging" で接続を構成します。 詳細については、「コンテナー リソースのライフサイクルの」を参照してください。

ヒント

既存の RabbitMQ サーバーに接続する場合は、代わりに AddConnectionString を呼び出します。 詳細については、「既存のリソースを参照する」を参照してください。

管理プラグインを使用して RabbitMQ サーバーリソースを追加する。

RabbitMQ サーバー リソースに RabbitMQ を追加するには、WithManagementPlugin メソッドを呼び出します。

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithManagementPlugin();

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

RabbitMQ 管理プラグインは、RabbitMQ サーバーを管理および監視するための HTTP ベースの API を提供します。 .NET .NET Aspire は、管理プラグインを実行する別のコンテナー イメージ docker.io/library/rabbitmq-management をアプリ ホストに追加します。

データ ボリューム付きのRabbitMQサーバーリソースを追加する

RabbitMQ サーバー リソースにデータ ボリュームを追加するには、WithDataVolume サーバー リソースで RabbitMQ メソッドを呼び出します。

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithDataVolume(isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

データ ボリュームは、コンテナーのライフサイクル外に RabbitMQ サーバー データを保持するために使用されます。 データ ボリュームは、/var/lib/rabbitmq サーバー コンテナーの RabbitMQ パスにマウントされ、name パラメーターが指定されていない場合は、名前がランダムに生成されます。 データボリュームと、それが バインドマウントよりも好まれる理由の詳細については、「Docker ドキュメント: ボリューム」を参照してください。

RabbitMQサーバーリソースをデータバインドマウントで追加する

RabbitMQ サーバー リソースにデータ バインド マウントを追加するには、WithDataBindMount メソッドを呼び出します。

var builder = DistributedApplication.CreateBuilder(args);

var rabbitmq = builder.AddRabbitMQ("messaging")
                      .WithDataBindMount(
                          source: @"C:\RabbitMQ\Data",
                          isReadOnly: false);

builder.AddProject<Projects.ExampleProject>()
        .WithReference(rabbitmq);

// After adding all resources, run the app...

大事な

データ バインド マウント、パフォーマンス、移植性、およびセキュリティが向上し、運用環境に適した ボリュームと比較して機能が制限されています。 ただし、バインド マウントを使用すると、ホスト システム上のファイルに直接アクセスして変更できるため、リアルタイムの変更が必要な開発とテストに最適です。

データ バインド マウントは、ホスト マシンのファイルシステムに依存して、コンテナーの再起動時に RabbitMQ サーバー データを保持します。 データ バインド マウントは、C:\RabbitMQ\Data サーバー コンテナー内のホスト コンピューター上の Windows 上の /RabbitMQ/Data (または Unix上の RabbitMQ) パスにマウントされます。 データ バインド マウントの詳細については、「Docker ドキュメント: バインド マウント」を参照してください。

パラメーターを指定して RabbitMQ サーバーリソースを追加する

コンテナー イメージで使用されるユーザー名とパスワードを明示的に指定する場合は、これらの資格情報をパラメーターとして指定できます。 次の代替例を考えてみましょう。

var builder = DistributedApplication.CreateBuilder(args);

var username = builder.AddParameter("username", secret: true);
var password = builder.AddParameter("password", secret: true);

var rabbitmq = builder.AddRabbitMQ("messaging", username, password);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(rabbitmq);

// After adding all resources, run the app...

パラメーターの指定の詳細については、「外部パラメーターの」を参照してください。

ホスティング統合の正常性チェック

RabbitMQ ホスティング統合により、RabbitMQ サーバー リソースの正常性チェックが自動的に追加されます。 正常性チェックでは、RabbitMQ サーバーが実行されていること、およびサーバーへの接続を確立できることを確認します。

ホスティング統合は、📦 AspNetCore.HealthChecks.Rabbitmq NuGet パッケージに依存します。

Client 統合

.NET Aspire RabbitMQ クライアント統合を開始するには、RabbitMQ NuGet パッケージをインストールします。 RabbitMQ クライアント統合は、との対話に使用できる RabbitMQ インスタンスを登録します。

dotnet add package Aspire.RabbitMQ.Client

クライアント RabbitMQ 追加する

クライアントを使用するプロジェクトの Program.cs ファイルで、任意の AddRabbitMQClientIHostApplicationBuilder 拡張メソッドを呼び出して、依存関係挿入コンテナーを介して使用する IConnection を登録します。 このメソッドは、接続名パラメーターを受け取ります。

builder.AddRabbitMQClient(connectionName: "messaging");

ヒント

connectionName パラメーターは、アプリ ホスト プロジェクトに RabbitMQ サーバー リソースを追加するときに使用する名前と一致する必要があります。 詳細については、「RabbitMQ サーバーリソースを追加」を参照してください。

その後、依存関係の挿入を使用して IConnection インスタンスを取得できます。 たとえば、サービスの例から接続を取得するには、次のようにします。

public class ExampleService(IConnection connection)
{
    // Use connection...
}

依存関係の挿入に関する詳細については、.NET 依存関係の挿入を参照してください。

キー付き RabbitMQ クライアントを追加する

接続名が異なる複数の IConnection インスタンスを登録する場合があります。 キー付き RabbitMQ クライアントを登録するには、AddKeyedRabbitMQClient メソッドを呼び出します。

builder.AddKeyedRabbitMQClient(name: "chat");
builder.AddKeyedRabbitMQClient(name: "queue");

その後、依存関係の挿入を使用して IConnection インスタンスを取得できます。 たとえば、サービスの例から接続を取得するには、次のようにします。

public class ExampleService(
    [FromKeyedServices("chat")] IConnection chatConnection,
    [FromKeyedServices("queue")] IConnection queueConnection)
{
    // Use connections...
}

キー付きサービスの詳細については、「.NET 依存関係の挿入: キー付きサービスの」を参照してください。

構成

.NET Aspire RabbitMQ 統合には、プロジェクトの要件と規則に基づいて接続を構成するための複数のオプションが用意されています。

接続文字列を使用する

ConnectionStrings 構成セクションの接続文字列を使用する場合は、AddRabbitMQClient メソッドを呼び出すときに接続文字列の名前を指定できます。

builder.AddRabbitMQClient(connectionName: "messaging");

その後、接続文字列は ConnectionStrings 構成セクションから取得されます。

{
  "ConnectionStrings": {
    "messaging": "amqp://username:password@localhost:5672"
  }
}

この接続文字列の書式を設定する方法の詳細については、RabbitMQ URI 仕様のドキュメントを参照してください。

構成プロバイダーを使用する

.NET Aspire RabbitMQ 統合では、Microsoft.Extensions.Configurationがサポートされます。 RabbitMQClientSettings キーを使用して、構成から Aspire:RabbitMQ:Client を読み込みます。 次のスニペットは、いくつかのオプションを構成する appsettings.json ファイルの例です。

{
  "Aspire": {
    "RabbitMQ": {
      "Client": {
        "ConnectionString": "amqp://username:password@localhost:5672",
        "DisableHealthChecks": true,
        "DisableTracing": true,
        "MaxConnectRetryCount": 2
      }
    }
  }
}

完全な RabbitMQ クライアント統合 JSON スキーマについては、Aspireを参照してください。RabbitMQ.Client/ConfigurationSchema.json.

インライン デリゲートを使用する

また、Action<RabbitMQClientSettings> configureSettings デリゲートを渡して、一部またはすべてのオプションをインラインで設定できます。たとえば、コードから正常性チェックを無効にすることができます。

builder.AddRabbitMQClient(
    "messaging",
    static settings => settings.DisableHealthChecks = true);

メソッドの Action<IConnectionFactory> configureConnectionFactory デリゲート パラメーターを使用して、AddRabbitMQClient を設定することもできます。 たとえば、接続のクライアント指定の名前を設定するには、次のようにします。

builder.AddRabbitMQClient(
    "messaging",
    configureConnectionFactory:
        static factory => factory.ClientProvidedName = "MyApp");

Client 統合の正常性チェック

既定では、.NET.NET Aspire 統合により、すべてのサービス 正常性チェック が有効になります。 詳細については、.NET.NET Aspire 統合の概要を参照してください。

.NET Aspire RabbitMQ 統合:

  • RabbitMQClientSettings.DisableHealthChecksfalseされたときに正常性チェックを追加します。これは、RabbitMQ サーバーに接続してチャネルを作成しようとします。
  • /health HTTP エンドポイントと統合されます。このエンドポイントは、アプリがトラフィックを受け入れる準備ができていると見なされるために、登録されているすべての正常性チェックに合格する必要があります。

可観測性とテレメトリ

統合により、ログ記録、トレース、メトリックの構成が自動的に設定されます。これは、監視の柱 とも呼ばれます。 統合の可観測性とテレメトリの詳細については、統合の概要 参照してください。 バッキング サービスによっては、一部の統合でこれらの機能の一部のみがサポートされる場合があります。 たとえば、一部の統合ではログ記録とトレースがサポートされますが、メトリックはサポートされません。 テレメトリ機能は、「構成」セクションに記載されている手法を使用して無効にすることもできます。

伐採

.NET Aspire RabbitMQ 統合では、次のログ カテゴリが使用されます。

  • RabbitMQ.Client

追跡

.NET Aspire RabbitMQ 統合では、OpenTelemetryを使用して次のトレース アクティビティが出力されます。

  • Aspire.RabbitMQ.Client

メトリック

現在、.NET AspireRabbitMQ 統合では、既定ではメトリックはサポートされていません。

関連項目