다음을 통해 공유


.NET Aspire RabbitMQ 통합

포함:호스팅 통합Client 통합

RabbitMQ 클라우드 환경, 온-프레미스 및 로컬 머신에 쉽게 배포할 수 있는 신뢰할 수 있는 메시징 및 스트리밍 브로커입니다. .NET Aspire RabbitMQ 통합을 사용하면 기존 RabbitMQ 인스턴스에 연결하거나 docker.io/library/rabbitmq 컨테이너 이미지사용하여 .NET 새 인스턴스를 만들 수 있습니다.

호스팅 통합

RabbitMQ 호스팅 통합은 RabbitMQserver를 RabbitMQServerResource 형식으로 모델링합니다. 해당 형식 및 API에 액세스하려면 앱 호스트 프로젝트에서 📦Aspire.Hosting.RabbitMQ NuGet 패키지를 추가하십시오.

dotnet add package Aspire.Hosting.RabbitMQ

자세한 내용은 dotnet add package 또는 응용 프로그램에서 패키지 종속성 관리 .NET를 참조하세요.

RabbitMQ server 리소스 추가

앱 호스트 프로젝트에서 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 리소스는 "guest"usernameCreateDefaultPasswordParameter 메서드를 사용하여 임의로 생성된 password가 포함된 기본 자격 증명을 제공합니다.

WithReference 메서드는 ExampleProject 중에서 "messaging"라는 연결을 구성합니다. 자세한 내용은 컨테이너 리소스 수명 주기참조하세요.

팁 (조언)

기존 RabbitMQserver연결하려는 경우 대신 AddConnectionString 호출합니다. 자세한 내용은 기존 리소스를 참조하세요.

관리 플러그 인을 사용하여 RabbitMQserver 리소스 추가

RabbitMQ 관리 플러그 인RabbitMQserver 리소스에 추가하려면 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 관리 플러그 인은 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 매개 변수가 제공되지 않으면 이름이 임의로 생성됩니다. 데이터 볼륨에 대한 정보와바인딩 탑재보다 선호되는 이유에 대한 자세한 내용은 문서의 볼륨를 참조하세요.

데이터 바인드 마운트를 사용하여 RabbitMQserver 리소스를 추가하십시오.

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 문서: 바인드 마운트를 참조하세요.

매개 변수를 사용하여 RabbitMQserver 리소스 추가

컨테이너 이미지에서 사용하는 사용자 이름 및 암호를 명시적으로 제공하려는 경우 이러한 자격 증명을 매개 변수로 제공할 수 있습니다. 다음 대체 예제를 고려합니다.

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이 실행 중인지, 그리고 연결이 가능한지 확인합니다.

호스팅 통합은 📦 AspNetCore.HealthChecks.Rabbitmq NuGet 패키지에 의존합니다.

Client 통합

.NET Aspire RabbitMQ client 통합을 시작하려면 📦Aspire설치합니다.RabbitMQ. client-consuming 프로젝트, 즉 RabbitMQclient사용하는 애플리케이션의 프로젝트에서 NuGet 패키지를Client. RabbitMQ client 통합은 RabbitMQ과 상호작용할 수 있도록 하는 IConnection 인스턴스를 등록합니다.

dotnet add package Aspire.RabbitMQ.Client

RabbitMQ client 추가

client사용 중인 프로젝트의 Program.cs 파일에서 종속성 주입 컨테이너를 통해 사용할 IConnection를 등록하도록, 모든 IHostApplicationBuilder에 대해 AddRabbitMQClient 확장 메서드를 호출합니다. 메서드는 연결 이름 매개 변수를 사용합니다.

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"
  }
}

이 연결 문자열의 서식을 지정하는 방법에 대한 자세한 내용은 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참조하세요.RabbitMQ.Client/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.NET Aspire 통합 개요참조하세요. 지원 서비스에 따라 일부 통합은 이러한 기능 중 일부만 지원할 수 있습니다. 예를 들어 일부 통합은 로깅 및 추적을 지원하지만 메트릭은 지원하지 않습니다. 구성 섹션에 제시된 기술을 사용하여 원격 분석 기능을 사용하지 않도록 설정할 수도 있습니다.

기록하기

.NET Aspire RabbitMQ 통합은 다음 로그 범주를 사용합니다.

  • RabbitMQ.Client

추적

.NET Aspire RabbitMQ 통합은 OpenTelemetry를 사용하여 다음 추적 활동을 발생시킵니다.

  • Aspire.RabbitMQ.Client

지표

.NET Aspire RabbitMQ 통합은 현재 기본적으로 메트릭을 지원하지 않습니다.

참조