Aracılığıyla paylaş


.NET Aspire RabbitMQ entegrasyonu

Içerir: Barındırma tümleştirmesi ve Client tümleştirmesi

RabbitMQ bulut ortamlarında, şirket içinde ve yerel makinenizde kolayca dağıtabileceğiniz güvenilir bir mesajlaşma ve akış aracısıdır. .NET Aspire RabbitMQ tümleştirmesi, mevcut RabbitMQ örneklerine bağlanmanıza veya .NETdocker.io/library/rabbitmq kapsayıcı görüntüsüile yeni örnekler oluşturmanıza olanak tanır.

Barındırma entegrasyonu

RabbitMQ barındırma tümleştirmesi, bir RabbitMQ sunucusunu RabbitMQServerResource türü olarak modeller. Bu tür ve API'lerine erişmek için 📦Aspire.Hosting.RabbitMQ NuGet paketini uygulama barındırıcısı projesine ekleyin.

dotnet add package Aspire.Hosting.RabbitMQ

Daha fazla bilgi için bkz. dotnet add package veya .NET uygulamalarında paket bağımlılıklarını yönetme.

RabbitMQ sunucu kaynağı ekleme

Uygulama ana bilgisayar projenizde, AddRabbitMQ örneğinde builder çağrısı yaparak bir RabbitMQ sunucu kaynağı ekleyin:

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, önceki örnekte docker.io/library/rabbitmq görüntüde gösterildiği gibi uygulama konağına bir kapsayıcı görüntüsü eklediğinde, yerel makinenizde yeni bir RabbitMQ sunucu örneği oluşturur. RabbitMQ sunucunuza (rabbitmq değişkeni) bir referans ExampleProject'ye eklenir. RabbitMQ sunucu kaynağı, username olarak "guest" ve CreateDefaultPasswordParameter yöntemi kullanılarak rastgele oluşturulan password içeren varsayılan kimlik bilgilerini içerir.

WithReference yöntemi, ExampleProject'de "messaging"adlı bir bağlantıyı yapılandırıyor. Daha fazla bilgi için bkz. Kapsayıcı kaynak yaşam döngüsü.

Bahşiş

Mevcut bir RabbitMQ sunucusuna bağlanmak isterseniz bunun yerine AddConnectionString'ı arayın. Daha fazla bilgi için bkz. Var olan kaynaklara başvurma.

Yönetim eklentisiyle RabbitMQ sunucu kaynağı ekleme

RabbitMQ sunucusu kaynağına eklemek için RabbitMQ yöntemini çağırın:

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 yönetim eklentisi, RabbitMQ sunucunuzun yönetimi ve izlenmesi için HTTP tabanlı bir API sağlar. .NET .NET Aspire, yönetim eklentisini çalıştıran uygulama konağına başka bir kapsayıcı görüntüsü docker.io/library/rabbitmq-management ekler.

RabbitMQ sunucu kaynağını, veri birimiyle ekle.

RabbitMQ sunucu kaynağına veri birimi eklemek için WithDataVolume sunucu kaynağında RabbitMQ yöntemini çağırın:

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

Veri hacmi, RabbitMQ sunucu verilerini kapsayıcısının yaşam döngüsü dışında kalıcı hale getirmek için kullanılır. Veri birimi, /var/lib/rabbitmq sunucu kapsayıcısında RabbitMQ yoluna bağlanır ve name parametresi sağlanmazsa ad rastgele oluşturulur. Veri hacimleri ve bağlamaların neden tercih edildiğine dair ayrıntılar hakkında daha fazla bilgi için Docker belgelerine bakın: Birimler.

Veri bağlama ile RabbitMQ sunucu kaynağı ekleme

RabbitMQ sunucu kaynağına veri bağlaması eklemek için WithDataBindMount yöntemini çağırın:

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

Önemli

Veri bağlama bağlamaları, daha iyi performans, taşınabilirlik ve güvenlik sunanbirimleriyle karşılaştırıldığında sınırlı işlevselliğe sahiptir ve bu da üretim ortamları için daha uygun olmasını sağlar. Ancak bağlama noktaları, gerçek zamanlı değişikliklerin gerekli olduğu geliştirme ve test için ideal olup, konak sistemindeki dosyalara doğrudan erişim ve değişiklik yapılmasına olanak sağlar.

Veri bağlamaları, kapsayıcı yeniden başlatmaları arasında RabbitMQ sunucusunun verilerini kalıcı hale getirmek için konak makinenin dosya sistemini kullanır. Veri bağlama noktası, RabbitMQ sunucu kapsayıcısında, ana makinedeki Windows üzerindeki C:\RabbitMQ\Data yoluna monte edilmiş (veya Unix üzerindeki /RabbitMQ/Data yoluna) durumdadır. Veri bağlama noktaları hakkında daha fazla bilgi için bkz. Docker belgeler: Bağlama noktaları.

Parametrelerle RabbitMQ sunucu kaynağı ekleme

Kapsayıcı görüntüsü tarafından kullanılan kullanıcı adını ve parolayı açıkça sağlamak istediğinizde, bu kimlik bilgilerini parametre olarak sağlayabilirsiniz. Aşağıdaki alternatif örneği göz önünde bulundurun:

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

Parametreleri sağlama hakkında daha fazla bilgi için bkz. Dış parametreler.

Barındırma entegrasyonunun sağlık denetimleri

RabbitMQ barındırma tümleştirmesi, RabbitMQ sunucu kaynağı için otomatik olarak bir sistem durumu denetimi ekler. Sistem durumu denetimi, RabbitMQ sunucusunun çalıştığını ve bu sunucuyla bağlantı kurulabileceğini doğrular.

Barındırma tümleştirmesi, 📦 AspNetCore.HealthChecks.Rabbitmq NuGet paketine dayanır.

Client tümleştirme

.NET Aspire RabbitMQ istemci tümleştirmesini kullanmaya başlamak için 📦Aspireyükleyin ve ardındanRabbitMQ.Client NuGet paketini, istemciyi kullanan projede, yani RabbitMQ istemcisini kullanan uygulamaya ait projede yükleyin. RabbitMQ istemci tümleştirmesi, ile etkileşim kurmak için kullanabileceğiniz bir RabbitMQ örneği kaydeder.

dotnet add package Aspire.RabbitMQ.Client

Önemli

Aspire.RabbitMQ.Client NuGet paketi, RabbitMQ.Client NuGet paketine bağlıdır. RabbitMQ.Client7.0.0 sürümü ile birlikte, ikili uyumu bozan bir değişiklik tanıtıldı. Bu sorunu çözmek için Aspire.RabbitMQ.Client.v7yeni bir istemci tümleştirme paketi oluşturuldu. Özgün Aspire.RabbitMQ.Client paketi, RabbitMQ istemci tümleştirmesinin önceki sürümleriyle uyumluluğu sağlayarak RabbitMQ.Client sürüm 6.8.1'e başvurmaya devam eder. Yeni Aspire.RabbitMQ.Client.v7 paketi, RabbitMQ.Client sürüm 7.0.0'a başvurur. gelecekteki bir .NET.NET Aspiresürümünde Aspire.RabbitMQ.Client sürüm 7.x güncelleştirilecek ve Aspire.RabbitMQ.Client.v7 paketi kullanım dışı bırakılacaktır. Daha fazla bilgi için RabbitMQ.NETClient 7.x'ye geçiş bölümüne bakın.

RabbitMQ istemcisi ekle

İstemci kullanan projenizin Program.cs dosyasında, bağımlılık enjeksiyonu kapsayıcısı aracılığıyla kullanılmak üzere bir IConnection kaydetmek için herhangi bir IHostApplicationBuilder üzerinde AddRabbitMQClient uzantı metodunu çağırın. yöntemi bir bağlantı adı parametresi alır.

builder.AddRabbitMQClient(connectionName: "messaging");

Bahşiş

connectionName parametresi, uygulama ana bilgisayar projesine RabbitMQ sunucu kaynağını eklerken kullanılan adla eşleşmelidir. Daha fazla bilgi için bkz. RabbitMQ sunucu kaynağı ekleme.

Daha sonra bağımlılık ekleme kullanarak IConnection örneğini alabilirsiniz. Örneğin, bağlantıyı örnek bir hizmetten almak için:

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

Bağımlılık ekleme hakkında daha fazla bilgi için bkz. .NET bağımlılık ekleme.

Anahtarlı RabbitMQ istemcisi ekleme

Farklı bağlantı adlarına sahip birden çok IConnection örneğini kaydetmek istediğiniz durumlar olabilir. Anahtarlı RabbitMQ istemcilerini kaydetmek için AddKeyedRabbitMQClient yöntemini çağırın:

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

Daha sonra bağımlılık ekleme kullanarak IConnection örneklerini alabilirsiniz. Örneğin, bağlantıyı örnek bir hizmetten almak için:

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

Anahtarlı hizmetler hakkında daha fazla bilgi için bkz. .NET bağımlılık ekleme: Anahtarlı hizmetler.

Konfigürasyon

.NET Aspire RabbitMQ tümleştirmesi, projenizin gereksinimlerine ve kurallarına göre bağlantıyı yapılandırmak için birden çok seçenek sağlar.

Bağlantı dizesi kullanma

ConnectionStrings yapılandırma bölümünden bir bağlantı dizesi kullanırken, AddRabbitMQClient yöntemini çağırırken bağlantı dizesinin adını sağlayabilirsiniz:

builder.AddRabbitMQClient(connectionName: "messaging");

Ardından bağlantı dizesi ConnectionStrings yapılandırma bölümünden alınır:

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

Bu bağlantı dizesini biçimlendirme hakkında daha fazla bilgi için URI belirtimi belgelerine bakın.

Yapılandırma sağlayıcılarını kullanma

.NET Aspire RabbitMQ tümleştirmesi, Microsoft.Extensions.Configuration'yi destekler. RabbitMQClientSettings anahtarını kullanarak yapılandırmadan Aspire:RabbitMQ:Client yükleme işlemi gerçekleştirir. Aşağıdaki kod parçacığı, bazı seçenekleri yapılandıran bir appsettings.json dosyası örneğidir:

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

Tam RabbitMQ istemci tümleştirme JSON şeması için bkz. Aspire.RabbitMQ.Client/ConfigurationSchema.json.

Satır içi temsilcileri kullanın

Ayrıca, bazı veya tüm seçenekleri satır içi olarak ayarlamak için Action<RabbitMQClientSettings> configureSettings delegatını geçirebilirsiniz; örneğin, koddan sağlık denetimlerini devre dışı bırakmak için:

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

AddRabbitMQClient yönteminin Action<IConnectionFactory> configureConnectionFactory temsilci parametresini kullanarak IConnectionFactory'yi de ayarlayabilirsiniz. Örneğin, bağlantılar için istemci tarafından sağlanan adı ayarlamak için:

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

Client entegrasyon sağlık kontrolleri

.NET .NET Aspire tümleştirmeleri, varsayılan olarak, tüm hizmetler için sağlık denetimlerini etkinleştirir. Daha fazla bilgi için bkz. .NET.NET Aspire tümleştirmelere genel bakış.

.NET Aspire RabbitMQ tümleştirmesi:

  • RabbitMQClientSettings.DisableHealthChecks falseolduğunda sağlık denetimini ekler, bu da RabbitMQ sunucusuna bağlanmaya ve bir kanal oluşturmaya çalışır.
  • Uygulamanın trafiği kabul etmeye hazır olarak kabul edilmesi için tüm kayıtlı sistem durumu denetimlerinin geçmesi gerektiğini belirten /health HTTP uç noktasıyla tümleşir.

Gözlemlenebilirlik ve telemetri

.NET .NET Aspire tümleştirmeleri, Loglama, İzleme ve Metrik yapılandırmalarını, bazen gözlemlenebilirlik sütunları olarak bilinen şekliyle otomatik olarak ayarlar. Tümleştirme gözlemlenebilirliği ve telemetri hakkında daha fazla bilgi için bkz. tümleştirmelere genel bakış. Destek hizmetine bağlı olarak, bazı tümleştirmeler bu özelliklerin yalnızca bazılarını destekleyebilir. Örneğin, bazı tümleştirmeler loglama ve izlemeyi destekler, ancak metrikleri desteklemez. Telemetri özellikleri, Yapılandırma bölümünde sunulan teknikler kullanılarak da devre dışı bırakılabilir.

Kayıt tutma

.NET Aspire RabbitMQ tümleştirmesi aşağıdaki günlük kategorilerini kullanır:

  • RabbitMQ.Client

Izleme

.NET Aspire RabbitMQ tümleştirmesi, OpenTelemetry kullanarak aşağıdaki izleme etkinliklerini gerçekleştirir:

  • Aspire.RabbitMQ.Client

Ölçüm

.NET Aspire RabbitMQ tümleştirmesi şu anda ölçümleri varsayılan olarak desteklememektedir.

Ayrıca bkz.