Aracılığıyla paylaş


Kılavuz: .NET Aspire mesajlaşma tümleştirmelerini ASP.NET Core'de kullanma

Bulutta yerel uygulamalar genellikle mesajlaşma kuyrukları, konular ve abonelikler gibi özellikler sağlayan ölçeklenebilir mesajlaşma çözümleri gerektirir. .NET Aspire tümleştirmeleri, Azure Service Busgibi çeşitli mesajlaşma sağlayıcılarına bağlanma sürecini basitleştirir. ** Bu öğreticide, bir bildirim sistemi oluşturmak için ASP.NET Core'ye bağlanarak .NET Aspire tümleştirmelerini kullanan bir Azure Service Bus uygulaması oluşturacaksınız. Gönderilen iletiler aboneler tarafından kullanılmak üzere bir Service Bus konusuna gönderilir. Nasıl yapılacağını öğreneceksiniz:

  • .NET Aspire tümleştirmelerini kullanacak şekilde ayarlanmış temel bir .NET uygulaması oluşturma
  • .NET Aspire'e bağlanmak için Azure Service Bus tümleştirmesi ekleyin
  • Veri göndermek ve almak için .NET.NET Aspire tümleştirme özelliklerini yapılandırma ve kullanma

Önkoşullar

.NET .NET Aspireile çalışmak için aşağıdakilerin yerel olarak yüklenmesi gerekir:

Daha fazla bilgi için bkz. .NET.NET Aspire kurulum ve araçve .NET.NET Aspire SDK.

Önceki önkoşullara ek olarak, Azure CLI'yi de yüklemeniz gerekir. CLI'yı yüklemek için CLI yükleme kılavuzundaki yönergeleri izleyin.

Azure Service Bus hesabını ayarlama

Bu öğreticide, üzerinde konu ve abonelik yapılandırılmış bir Azure Service Bus ad alanına erişmeniz gerekir. Gerekli kaynakları ayarlamak için aşağıdaki seçeneklerden birini kullanın:

  • portal: konusu ve aboneliğiile service bus hesabı oluşturma .

Alternatif olarak:

  • CLI: Gerekli kaynaklarını ayarlamak için CLI veya CloudShell'de aşağıdaki komutları çalıştırın:

    az group create -n <your-resource-group-name> --location eastus
    az servicebus namespace create -g <your-resource-group-name> --name <your-namespace-name> --location eastus
    az servicebus topic create -g <your-resource-group-name> --namespace-name <your-namespace-name> --name notifications
    az servicebus topic subscription create -g <your-resource-group-name> --namespace-name <your-namespace-name> --topic-name notifications --name mobile
    

    Not

    Kendi değerlerinizle kaynak grubu adı ve ad alanınızın adı yer tutucularını değiştirin. Service Bus ad alanı adları Azuregenelinde genel olarak benzersiz olmalıdır.

Azure kimlik doğrulaması

Bu hızlı başlangıç parolasız kimlik doğrulaması veya bağlantı dizesi kullanılarak tamamlanabilir. Parolasız bağlantılar, Service Bus ad alanına bağlanmak için Active Directory ve rol tabanlı erişim denetimi (RBAC) Azure kullanır. Kodunuzda, yapılandırma dosyanızda veya Azure Key Vaultgibi güvenli depolama alanında sabit kodlanmış bağlantı dizesi olması konusunda endişelenmeniz gerekmez.

Service Bus ad alanına bağlanmak için bir bağlantı dizesi de kullanabilirsiniz, ancak gerçek dünya uygulamaları ve üretim ortamları için parolasız yaklaşım önerilir. Daha fazla bilgi için Kimlik Doğrulaması ve yetkilendirme hakkında bilgi edinin veyaparolasız genel bakış sayfasını ziyaret edin.

Service Bus ad alanınızda, Visual Studio veya Azure CLI'da oturum açtığınız kullanıcı hesabına aşağıdaki rolü atayın:

Örnek çözümü oluşturma

Yeni .NET Aspire Başlangıç Uygulaması oluşturmak için Visual Studio, Visual Studio Codeveya .NET CLI kullanabilirsiniz.

Visual Studio, sizin için bazı ilk kurulum yapılandırmalarını işleyen .NET Aspire şablonları sağlar. Bu hızlı başlangıçta proje oluşturmak için aşağıdaki adımları tamamlayın:

  1. Visual Studioüst kısmında Dosya>Yeni>Projectadresine gidin.

  2. İletişim kutusunda Aspire arayın ve .NET.NET Aspire başlangıç uygulamasıseçin. sonrakiseçin.

    .NET.NET Aspire Başlangıç Uygulaması şablonunun ekran görüntüsü.

  3. Yeni projenizi yapılandırın ekranında:

    • AspireSampleProje Adı girin.
    • Kalan değerleri varsayılan ayarlarında bırakın ve İleriseçin.
  4. Ek bilgiler ekranında:

    • .NET 9.0 (Standart Terim Desteği) seçildiğinden emin olun.
    • Önbelleğe alma için Redis kullan (desteklenen bir kapsayıcı çalışma zamanı gerektirir) işaretli olduğundan emin olun ve oluştur'u seçin.
    • İsteğe bağlı olarak, Test projesi oluşturseçebilirsiniz. Daha fazla bilgi için: bkz. İlk .NET.NET Aspire testinizi yazın.

Visual Studio, .NET Aspirekullanmak üzere yapılandırılmış yeni bir çözüm oluşturur.

Visual Studio Code, sizin için bazı ilk kurulum yapılandırmalarını işleyen .NET Aspire proje şablonları sağlar. Bu hızlı başlangıçta proje oluşturmak için aşağıdaki adımları tamamlayın:

  1. Yeni bir örneğinden (klasör açık olmadan) proje oluştur düğmesini seçin.

  2. .NET .NET Aspire Başlangıç Uygulaması şablonunu seçin.

    .NET.NET Aspire Başlangıç Uygulaması şablonunun ekran görüntüsü.

şablonlarını henüz yüklemediyseniz aşağıdaki komutunu çalıştırın:

dotnet new install Aspire.ProjectTemplates

Yukarıdaki .NET CLI komutu, .NET Aspire şablonlarının kullanılabilir olmasını sağlar. Şablondan .NET.NET Aspire Starter Uygulaması oluşturmak için aşağıdaki dotnet new komutunu çalıştırın:

dotnet new aspire-starter --use-redis-cache --output AspireSample

Daha fazla bilgi için bkz. dotnet new. .NET CLI, .NET Aspirekullanacak şekilde yapılandırılmış yeni bir çözüm oluşturur.

Worker Service projesini ekleme

Ardından, Worker Serviceiletileri almak ve işlemek için çözüme bir Azure Service Bus projesi ekleyin.

  1. Çözüm gezgininde, en üst düzey AspireSample çözüm düğümüne sağ tıklayın ve Ekle>Yeni projeöğesini seçin.
  2. Worker Service şablonunu arayıp seçin ve İleriseçin.
  3. Proje adıiçin AspireSample.WorkerService girin ve Sonraki'yiseçin.
  4. Ek bilgiler ekranında:
    • .NET 9.0 seçildiğinden emin olun.
    • .NET .NET Aspire orkestrasyon öğesinde Listele'nin işaretli olduğundan emin olun ve Oluşturöğesini seçin.

Visual Studio projeyi çözümünüze ekler ve AspireSample.AppHost projesinin Program.cs dosyasını yeni bir kod satırıyla güncelleştirir:

builder.AddProject<Projects.AspireSample_WorkerService>(
    "aspiresample-workerservice");

Visual Studio araçları, yeni projenizi daha sonra keşfedebileceğiniz düzenleme özelliklerini etkinleştiren IDistributedApplicationBuilder nesnesine kaydetmek için bu kod satırını ekledi.

  1. Visual Studio Code çözüm adının yanındaki + düğmesini seçerek çözüme yeni bir proje ekleyin:

    Visual Studio Code: C# DevKit Çözüm Gezgini'nden yeni proje ekleyin.

  2. Proje şablonlarını filtrelemek için arama kutusuna çalışan girin ve bulunan şablonunu seçin:

    Visual Studio Code: Proje ekleme bölümünden Worker Service proje şablonuna filtreleyin.

  3. şablonunu seçin ve proje adını AspireSample.WorkerServiceolarak girin.

  4. Projeyi çözümle aynı dizinde oluşturmak için Varsayılan dizin seçin.

  5. Projeyi çözüme eklemek için proje oluştur seçin.

  6. Çözüm Gezgini AspireSample.AppHost projesi sağ tıklayın ve proje başvurusu ekleseçin:

    Visual Studio Code: AspireSample.AppHost'tan AspireSample.WorkerService'e proje başvurusu ekleyin.

  7. builder.Build().Run();çağrısından önce AspireSample.AppHost projesindeki Program.cs dosyasına aşağıdaki kod satırını ekleyin:

    builder.AddProject<Projects.AspireSample_WorkerService>(
        "aspiresample-workerservice");
    
  1. Uygulamanın kök dizininde yeni bir Worker Service uygulaması oluşturmak için dotnet new komutunu kullanın:

    dotnet new worker --name AspireSample.WorkerService
    
  2. Projeyi çözüme eklemek için dotnet sln komutunu kullanın:

    dotnet sln AspireSample.sln add AspireSample.WorkerService/AspireSample.WorkerService.csproj
    
  3. dotnet add komutunu kullanarak .AppHost ve .WorkerService projeleri arasında bir proje referansı ekleyin.

    dotnet add AspireSample.AppHost/AspireSample.AppHost.csproj reference AspireSample.WorkerService/AspireSample.WorkerService.csproj
    
  4. builder.Build().Run();çağrısından önce AspireSample.AppHost projesindeki Program.cs dosyasına aşağıdaki kod satırını ekleyin:

    builder.AddProject<Projects.AspireSample_WorkerService>(
        "aspiresample-workerservice");
    

En üst düzey dizinin aspire-messagingolarak adlandırıldığı varsayılarak, tamamlanmış çözüm yapısı aşağıdakine benzemelidir:

└───📂 aspire-messaging
     ├───📂 AspireSample.WorkerService
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.WorkerService.csproj
     │    ├─── Program.cs
     │    └─── Worker.cs
     ├───📂 AspireSample.ApiService
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.ApiService.csproj
     │    └─── Program.cs
     ├───📂 AspireSample.AppHost
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.AppHost.csproj
     │    └─── Program.cs
     ├───📂 AspireSample.ServiceDefaults
     │    ├─── AspireSample.ServiceDefaults.csproj
     │    └─── Extensions.cs
     ├───📂 AspireSample.Web
     │    ├───📂 Components
     │    │    ├───📂 Layout
     │    │    │    ├─── MainLayout.razor
     │    │    │    ├─── MainLayout.razor.css
     │    │    │    ├─── NavMenu.razor
     │    │    │    └─── NavMenu.razor.css
     │    │    ├───📂 Pages
     │    │    │    ├─── Counter.razor
     │    │    │    ├─── Error.razor
     │    │    │    ├─── Home.razor
     │    │    │    └─── Weather.razor
     │    │    ├─── _Imports.razor
     │    │    ├─── App.razor
     │    │    └─── Routes.razor
     │    ├───📂 Properties
     │    │    └─── launchSettings.json
     │    ├───📂 wwwroot
     │    │    ├───📂 bootstrap
     │    │    │    ├─── bootstrap.min.css
     │    │    │    └─── bootstrap.min.css.map
     │    │    ├─── app.css
     │    │    └─── favicon.png
     │    ├─── appsettings.Development.json
     │    ├─── appsettings.json
     │    ├─── AspireSample.Web.csproj
     │    ├─── Program.cs
     │    └─── WeatherApiClient.cs
     └─── AspireSample.sln

API'ye .NET.NET Aspire tümleştirmesini ekleme

AspireSample.ApiService uygulamanıza .NET Aspire Azure Service Bus tümleştirmesini ekleyin:

  1. Çözüm Gezgini, AspireSample.ApiService.csproj dosyasına çift tıklayarak XML dosyasını açın.

  2. aşağıdaki <PackageReference> öğesini <ItemGroup> öğesine ekleyin:

    <ItemGroup>
        <PackageReference Include="Aspire.Azure.Messaging.ServiceBus"
                          Version="8.0.1" />
    </ItemGroup>
    
  1. Çözüm Gezgini'nde, AspireSample.ApiService projesine sağ tıklayın ve NuGet Paketi Ekle'yi seçin.

    Visual Studio Code: AspireSample.ApiService projesine NuGet paketi ekleyin.

  2. Arama kutusuna Aspire.Azure.Messaging.ServiceBus girin ve listeden paketi seçin.

  3. Paketi yüklemek için (en son) sürümünü seçin.

dotnet add package Aspire.Azure.Messaging.ServiceBus

AspireSample.ApiService projesinin Program.cs dosyasında, AddAzureServiceBusClient uzantısı yöntemine bir çağrı ekleyin ve mevcut AddServiceDefaultsçağrısını değiştirin:

// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");

Daha fazla bilgi için bkz. AddAzureServiceBusClient.

Bu yöntem aşağıdaki görevleri gerçekleştirir:

  • ServiceBusClient'e bağlanmak için DI kapsayıcısına bir Azure Service Bus kaydeder.
  • İlgili hizmetler için sağlık kontrolleri, günlük kaydı ve telemetriyi otomatik olarak etkinleştirir.

Aynı projenin appsettings.json dosyasına ilgili bağlantı bilgilerini ekleyin:

{
  // Existing configuration is omitted for brevity.
  "ConnectionStrings": {
    "serviceBusConnection": "{your_namespace}.servicebus.windows.net"
  }
}

Not

Hizmet URI’lerindeki {your_namespace} ifadesini, kendi Service Bus ad alanınızın adıyla değiştirdiğinizden emin olun.

API uç noktasını oluşturma

API, verileri almak, Service Bus konusuna yayımlamak ve abonelere iletmek için bir uç nokta sağlamalıdır. Service Bus konusuna ileti göndermek için aşağıdaki uç noktayı AspireSample.ApiService projesine ekleyin. Program.cs dosyasının tüm içeriğini aşağıdaki C# koduyla değiştirin:

using Azure.Messaging.ServiceBus;

var builder = WebApplication.CreateBuilder(args);

// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");

// Add services to the container.
builder.Services.AddProblemDetails();

var app = builder.Build();

// Configure the HTTP request pipeline.
app.UseExceptionHandler();

app.MapPost("/notify", static async (ServiceBusClient client, string message) =>
{
    var sender = client.CreateSender("notifications");

    // Create a batch
    using ServiceBusMessageBatch messageBatch =
        await sender.CreateMessageBatchAsync();

    if (messageBatch.TryAddMessage(
            new ServiceBusMessage($"Message {message}")) is false)
    {
        // If it's too large for the batch.
        throw new Exception(
            $"The message {message} is too large to fit in the batch.");
    }

    // Use the producer client to send the batch of
    // messages to the Service Bus topic.
    await sender.SendMessagesAsync(messageBatch);

    Console.WriteLine($"A message has been published to the topic.");
});

app.MapDefaultEndpoints();

app.Run();

.NET Aspire entegrasyonunu Worker Service'e ekleyin.

AspireSample.WorkerService projenize .NET Aspire Azure Service Bus tümleştirmesini ekleyin. Aspireeklerken uyguladığınız adımların aynısını izleyin.Azure. Messaging.ServiceBus AspireSample.ApiService projesine NuGet paketi. Eklendikten sonra, Service Bus konusuyla iletileri işlemek için çalışan hizmetini yapılandırabilirsiniz.

AspireSample.WorkerService projesinin Program.cs dosyasında, var olan kodu aşağıdakilerle yeniden yapıştırın:

using AspireSample.WorkerService;

var builder = Host.CreateApplicationBuilder(args);

builder.AddAzureServiceBusClient("serviceBusConnection");

builder.Services.AddHostedService<Worker>();

var host = builder.Build();
host.Run();

AddAzureServiceBusClient yöntemi aşağıdaki görevleri gerçekleştirir:

  • ServiceBusClient'e bağlanmak için DI kapsayıcısına bir Azure Service Bus kaydeder.
  • İlgili hizmetler için sağlık kontrolleri, günlük kaydı ve telemetriyi otomatik olarak etkinleştirir.

AspireSample.WorkerService projesinin appsettings.json dosyasına ilgili bağlantı bilgilerini ekleyin:

{
  // Existing configuration is omitted for brevity.
  "ConnectionStrings": {
    "serviceBusConnection": "{your_namespace}.servicebus.windows.net"
  }
}

Not

Hizmet URI'lerindeki {your_namespace} ifadelerini, kendi Service Bus ad alanınızın adıyla değiştirdiğinizden emin olun.

Aboneden gelen iletiyi işleme

messages kuyruğuna yeni bir ileti yerleştirildiğinde, çalışma hizmetinin iletiyi alması, işlemesi ve silmesi gerekir. Worker.cs sınıfını aşağıdaki kodla eşleşecek şekilde güncelleştirin:

using Azure.Messaging.ServiceBus;

namespace AspireSample.WorkerService;

public sealed class Worker(
    ILogger<Worker> logger,
    ServiceBusClient client) : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            var processor = client.CreateProcessor(
                "notifications",
                "mobile",
                new ServiceBusProcessorOptions());

            // Add handler to process messages
            processor.ProcessMessageAsync += MessageHandler;

            // Add handler to process any errors
            processor.ProcessErrorAsync += ErrorHandler;

            // Start processing
            await processor.StartProcessingAsync();

            logger.LogInformation("""
                Wait for a minute and then press any key to end the processing
                """);

            Console.ReadKey();

            // Stop processing
            logger.LogInformation("""

                Stopping the receiver...
                """);

            await processor.StopProcessingAsync();

            logger.LogInformation("Stopped receiving messages");
        }
    }

    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();

        logger.LogInformation("Received: {Body} from subscription.", body);

        // Complete the message. messages is deleted from the subscription.
        await args.CompleteMessageAsync(args.Message);
    }

    // Handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        logger.LogError(args.Exception, "{Error}", args.Exception.Message);
        
        return Task.CompletedTask;
    }
}

Uygulamayı yerel olarak çalıştırma ve test edin

Örnek uygulama artık test için hazırdır. API'ye gönderilen verilerin Azure Service Bus konusuna gönderildiğini ve abone çalışan hizmeti tarafından tüketildiğini doğrulayın:

  1. Başlat hata ayıklama düğmesini seçerek veya F5tuşlarına basarak .NET.NET Aspire projesini başlatın. .NET .NET Aspire pano uygulaması tarayıcıda açılmalıdır.
  1. Başlat hata ayıklama düğmesini seçerek veya F5tuşlarına basarak .NET.NET Aspire projesini başlatın. .NET .NET Aspire pano uygulaması tarayıcıda açılmalıdır.
  1. dotnet run --project AspireSample.AppHostçalıştırarak .NET.NET Aspire projesini başlatın. .NET .NET Aspire pano uygulaması tarayıcıda açılmalıdır.
  1. Kaynaklar sayfasındaki apiservice satırında, Uç Noktaları içinde, weatherforecast uç noktasını açan bağlantıyı bulun. HTTPS bağlantı noktası numarasını not edin.

  2. .NET .NET Aspire panosunda, aspiresample-workerservice projesinin günlüklerini görüntüleyin.

  3. Terminal penceresinde curl komutunu kullanarak API'ye bir test iletisi gönderin:

    curl -X POST -H "Content-Type: application/json" https://localhost:{port}/notify?message=hello%20aspire  
    

    {port}'i önceki bağlantı noktası numarasıyla değiştirdiğinizden emin olun.

  4. aspiresample-workerservice günlüklerine geri dönün. Çıkış kayıtlarında test mesajının yazılı olduğunu görmelisiniz.

Tebrikler! ASP.NET Core API'si oluşturup, Azure Service Bus'e bağlanması için Aspire tümleştirmelerini yapılandırdınız.

Kaynakları temizleme

Oluşturduğunuz Azure kaynaklarına artık ihtiyacınız kalmadığında kaynak grubunu silmek için aşağıdaki Azure CLI komutunu çalıştırın. Kaynak grubunun silinmesi, içinde yer alan kaynakları da siler.

az group delete --name <your-resource-group-name>

Daha fazla bilgi için bkz. 'daki kaynakları temizleme Azure.