次の方法で共有


.NET Aspire RabbitMQ 統合

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

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

ホスティング統合

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

dotnet add package Aspire.Hosting.RabbitMQ

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

リソース RabbitMQserver 追加する

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

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 イメージでコンテナー イメージをアプリ ホストに追加すると、ローカル コンピューターに新しい RabbitMQserver インスタンスが作成されます。 RabbitMQ server への参照 (rabbitmq 変数) が ExampleProjectに追加されます。 RabbitMQ server リソースには、CreateDefaultPasswordParameter メソッドを使用して、"guest" とランダムに生成された passwordusername を持つ既定の資格情報が含まれています。

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

ヒント

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

RabbitMQ server リソースを管理プラグインで追加する

リソースに 管理プラグインを追加するには、 メソッドを呼び出します。

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 管理プラグインは、RabbitMQserverの管理と監視のための HTTP ベースの API を提供します。 .NET .NET Aspire は、管理プラグインを実行する別のコンテナー イメージ docker.io/library/rabbitmq-management をアプリ ホストに追加します。

データ量のあるリソース RabbitMQserver を追加する

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

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...

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

RabbitMQ server リソースを、データバインドマウントとして追加する

RabbitMQ server リソースにデータ バインド マウントを追加するには、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...

大事な

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

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

RabbitMQ server のパラメーターを持つリソースを追加する

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

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 ホスティング統合により、RabbitMQserver リソースの正常性チェックが自動的に追加されます。 正常性チェックでは、RabbitMQserver が実行されていることと、RabbitMQserver への接続を確立できることを確認します。

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

Client 統合

.NET Aspire RabbitMQ client 統合を開始するには、📦Aspireをインストールします。RabbitMQ.clientを使用するプロジェクト(RabbitMQclientを使用するアプリケーションのプロジェクト) に NuGet パッケージをClient します。 RabbitMQ client 統合では、RabbitMQとの対話に使用できる IConnection インスタンスが登録されます。

dotnet add package Aspire.RabbitMQ.Client

RabbitMQ client の追加

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

builder.AddRabbitMQClient(connectionName: "messaging");

ヒント

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

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

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

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

キー付き RabbitMQclient を追加する

接続名が異なる複数の 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がサポートされます。 Aspire:RabbitMQ:Client キーを使用して、構成から RabbitMQClientSettings を読み込みます。 次のスニペットは、いくつかのオプションを構成する appsettings.json ファイルの例です。

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

完全な RabbitMQclient 統合 JSON スキーマについては、Aspireを参照してください。RabbitMQClient/ConfigurationSchema を見てください。json.

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

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

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

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

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

Client 統合の正常性チェック

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

.NET Aspire RabbitMQ 統合:

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

可観測性とテレメトリ

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

伐採

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

  • RabbitMQ.Client

追跡

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

  • Aspire.RabbitMQ.Client

メトリック

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

関連項目