Sdílet prostřednictvím


Kurz: Použití integrace zasílání zpráv .NET Aspire v ASP.NET Core

Nativní cloudové aplikace často vyžadují škálovatelná řešení zasílání zpráv, která poskytují možnosti, jako jsou fronty zpráv a témata a odběry. .NET Aspire integrace zjednodušují proces připojování k různým poskytovatelům zasílání zpráv, například Azure Service Bus. V tomto kurzu vytvoříte aplikaci ASP.NET Core, která k vytvoření systému oznámení používá integrace .NET Aspire pro připojení k Azure Service Bus. Odeslané zprávy se odesílají do tématu služby Service Bus, aby je mohli používat předplatitelé. Naučíte se:

  • Vytvořte základní .NET aplikaci, která je nastavená pro použití integrací .NET Aspire
  • Přidání integrace .NET Aspire pro připojení k Azure Service Bus
  • Konfigurace a používání funkcí integrace .NET.NET Aspire k odesílání a příjmu dat

Požadavky

Pokud chcete pracovat s .NET.NET Aspire, potřebujete místně nainstalovat následující:

Další informace najdete v tématu .NET.NET Aspire nastavení a nástrojea .NET.NET Aspire SDK.

Kromě předchozích požadavků musíte také nainstalovat Azure rozhraní příkazového řádku. Pokud chcete nainstalovat rozhraní příkazového řádku Azure, postupujte podle pokynů v průvodci instalací rozhraní příkazového řádku Azure.

Nastavení účtu Azure Service Bus

Pro účely tohoto kurzu budete potřebovat přístup k oboru názvů Azure Service Bus s nakonfigurovaným tématem a předplatným. K nastavení požadovaných prostředků použijte jednu z následujících možností:

  • portál : Vytvořte účet služby Service Bus s tématem a předplatným.

Alternativně:

  • Azure rozhraní příkazového řádku: Pro nastavení požadovaných Azure Service Bus prostředků spusťte následující příkazy v Azure CLI nebo v CloudShell:

    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
    

    Poznámka

    Nahraďte zástupné symboly název skupiny prostředků a název oboru názvů vlastními hodnotami. Názvy služby Service Bus musí být globálně jedinečné v rámci Azure.

ověřování Azure

Tento rychlý start je možné dokončit pomocí ověřování bez hesla nebo připojovacího řetězce. Připojení bez hesla používají Azure Active Directory a řízení přístupu na základě role (RBAC) pro připojení k oboru názvů služby Service Bus. Nemusíte si dělat starosti s pevně zakódovaným připojovacím řetězcem v kódu, konfiguračním souborem nebo v zabezpečeném úložišti, jako je Azure Key Vault.

Můžete také použít připojovací řetězec pro připojení k oboru názvů služby Service Bus, ale pro reálné aplikace a produkční prostředí se doporučuje přístup bez hesla. Další informace najdete v tématu o ověřování a autorizaci nebo navštivte stránku přehledu bez hesla.

Ve vašem oboru názvů služby Service Bus přiřaďte následující roli uživatelskému účtu, se kterým jste se přihlásili pomocí Visual Studio nebo rozhraní příkazového řádku Azure:

Vytvoření ukázkového řešení

Pokud chcete vytvořit novou úvodní aplikaci .NET Aspire, můžete použít Visual Studio, Visual Studio Codenebo rozhraní příkazového řádku .NET.

Visual Studio poskytuje šablony .NET Aspire, které za vás zpracovávají některé počáteční konfigurace nastavení. Pomocí následujících kroků vytvořte projekt pro tento rychlý start:

  1. V horní části Visual Studiopřejděte na Soubor>Nový projekt>.

  2. V dialogovém okně vyhledejte Aspire a vyberte .NET.NET Aspire úvodní aplikaci. Vyberte Další.

    snímek obrazovky se šablonou úvodní aplikace .NET.NET Aspire

  3. Na obrazovce Konfigurujte svůj nový projekt:

    • Zadejte název projektu AspireSample .
    • Ponechte rest hodnot ve výchozím nastavení a vyberte Další.
  4. Na obrazovce Další informace:

    • Ujistěte se, že je vybraná .NET 9.0 (standardní podpora termínů).
    • Ujistěte se, že je zaškrtnuté políčko Použít Redis pro ukládání do mezipaměti (vyžaduje podporovaný modul runtime kontejneru) a vyberte Vytvořit.
    • Volitelně můžete vybrat Vytvořit projekt testů. Další informace viz Napište svůj první .NET.NET Aspire test.

Visual Studio vytvoří nové řešení strukturované pro použití .NET Aspire.

Visual Studio Code poskytuje .NET Aspire šablony projektu, které zpracovávají některé počáteční konfigurace nastavení za vás. Pomocí následujících kroků vytvořte projekt pro tento rychlý start:

  1. V nové instanci Visual Studio Code (bez otevřené složky) vyberte tlačítko Vytvořit projekt .NET.

  2. Vyberte šablonu .NET.NET Aspire Starter App.

    snímek obrazovky se šablonou úvodní aplikace .NET.NET Aspire

Pokud jste ještě nenainstalovali šablony .NET.NET Aspire, spusťte příkaz dotnet new install:

dotnet new install Aspire.ProjectTemplates

Předchozí příkaz rozhraní příkazového řádku .NET zajistí, že máte k dispozici .NET Aspire šablony. Pokud chcete ze šablony vytvořit .NET.NET Aspire úvodní aplikaci, spusťte následující příkaz dotnet new:

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

Další informace najdete v tématu dotnet new. Rozhraní příkazového řádku .NET vytvoří nové řešení, které je strukturováno pro použití .NET Aspire.

Přidání projektu Worker Service

Dále do řešení přidejte projekt Worker Service pro načtení a zpracování zpráv do a z Azure Service Bus.

  1. V Průzkumníku řešení klikněte pravým tlačítkem na uzel AspireSample řešení nejvyšší úrovně a vyberte Přidat>Nový projekt.
  2. Vyhledejte a vyberte šablonu Worker Service a zvolte Další.
  3. Jakonázev projektu zadejte AspireSample.WorkerService a vyberte Další.
  4. Na obrazovce Další informace:
    • Ujistěte se, že je vybraná .NET 9.0.
    • Ujistěte se, že máte zaškrtnuté Zařazení do .NET.NET Aspire orchestrace a vyberte Vytvořit.

Visual Studio projekt přidá do řešení a aktualizuje soubor Program.cs projektu AspireSample.AppHost novým řádkem kódu:

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

Visual Studio nástroji přidali tento řádek kódu pro registraci nového projektu do objektu IDistributedApplicationBuilder, který umožňuje funkce orchestrace, které prozkoumáte později.

  1. V průzkumníku řešení v Visual Studio Codevyberte tlačítko + vedle názvu řešení a přidejte do řešení nový projekt:

    Visual Studio Code: Přidejte nový projekt z Průzkumníka řešení C# DevKit.

  2. Pokud chcete filtrovat šablony projektů, zadejte do vyhledávacího pole Worker a vyberte šablonu, která se našla:

    Visual Studio Code: Filtrování podle Worker Service šablony projektu z nabídky Přidat projekt.

  3. Zvolte šablonu Worker Service a zadejte název projektu jako AspireSample.WorkerService.

  4. Vyberte Výchozí adresář a vytvořte projekt ve stejném adresáři jako řešení.

  5. Vyberte Vytvořit projekt a přidejte projekt do řešení.

  6. Klikněte pravým tlačítkem na projekt AspireSample.AppHost v Průzkumníku Řešení a vyberte Přidat referenci projektu:

    Visual Studio Code: Přidání odkazu na projekt z AspireSample.AppHost do AspireSample.WorkerService.

  7. Před voláním builder.Build().Run();přidejte následující řádek kódu do souboru Program.cs v AspireSample.AppHost projektu:

    builder.AddProject<Projects.AspireSample_WorkerService>(
        "aspiresample-workerservice");
    
  1. V kořenovém adresáři aplikace pomocí příkazu dotnet new vytvořte novou aplikaci Worker Service:

    dotnet new worker --name AspireSample.WorkerService
    
  2. Pomocí příkazu dotnet sln přidejte projekt do řešení:

    dotnet sln AspireSample.sln add AspireSample.WorkerService/AspireSample.WorkerService.csproj
    
  3. Pomocí příkazu dotnet add přidejte referenci mezi projektem .AppHost a projektem .WorkerService.

    dotnet add AspireSample.AppHost/AspireSample.AppHost.csproj reference AspireSample.WorkerService/AspireSample.WorkerService.csproj
    
  4. Před voláním builder.Build().Run();přidejte následující řádek kódu do souboru Program.cs v AspireSample.AppHost projektu:

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

Dokončená struktura řešení by měla vypadat podobně jako následující, za předpokladu, že adresář nejvyšší úrovně má název aspire-messaging:

└───📂 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

Přidání integrace .NET.NET Aspire do rozhraní API

Přidejte integraci .NET Aspire Azure Service Bus do aplikace AspireSample.ApiService:

  1. Ve Průzkumníku řešení dvakrát klikněte na soubor AspireSample.ApiService.csproj, čímž se otevře jeho XML obsah.

  2. Do elementu <ItemGroup> přidejte následující položku <PackageReference>:

    <ItemGroup>
        <PackageReference Include="Aspire.Azure.Messaging.ServiceBus"
                          Version="8.0.1" />
    </ItemGroup>
    
  1. V Průzkumníku řešeníklikněte pravým tlačítkem na projekt AspireSample.ApiService a vyberte Přidat balíček NuGet:

    Visual Studio Code: Přidání balíčku NuGet do projektu AspireSample.ApiService

  2. Zadejte Aspire.Azure. Messaging.ServiceBus do vyhledávacího pole a vyberte balíček ze seznamu.

  3. Vyberte (nejnovější) verzi a nainstalujte balíček.

dotnet add package Aspire.Azure.Messaging.ServiceBus

V souboru Program.cs projektu AspireSample.ApiService přidejte volání metody rozšíření AddAzureServiceBusClient – nahraďte stávající volání AddServiceDefaults.

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

Další informace najdete v tématu AddAzureServiceBusClient.

Tato metoda provádí následující úlohy:

  • Zaregistruje ServiceBusClient v kontejneru DI pro připojení k Azure Service Bus.
  • Automaticky povolí odpovídající kontroly stavu, protokolování a telemetrii pro příslušné služby.

Do souboru appsettings.json stejného projektu přidejte odpovídající informace o připojení:

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

Poznámka

Nezapomeňte v identifikátorech URI služby nahradit {your_namespace} názvem vašeho vlastního oboru názvů pro Service Bus.

Vytvoření koncového bodu rozhraní API

Rozhraní API musí poskytnout koncový bod pro příjem dat, jejich publikování do tématu v Service Bus a jejich vysílání odběratelům. Do projektu AspireSample.ApiService přidejte následující koncový bod, který odešle zprávu do tématu služby Service Bus. Veškerý obsah souboru Program.cs nahraďte následujícím kódem jazyka C#:

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();

Přidání integrace .NET Aspire do Worker Service

Přidejte integraci .NET Aspire Azure Service Bus do projektu AspireSample.WorkerService. Postupujte stejně jako předtím, když jste přidali Aspire.Azure. Messaging.ServiceBus balíček NuGet do projektu AspireSample.ApiService. Po přidání můžete službu pracovního procesu nakonfigurovat tak, aby zpracovávala zprávy z tématu služby Service Bus.

V souboru Program.cs projektu AspireSample.WorkerService znovu vytvořte existující kód následujícím kódem:

using AspireSample.WorkerService;

var builder = Host.CreateApplicationBuilder(args);

builder.AddAzureServiceBusClient("serviceBusConnection");

builder.Services.AddHostedService<Worker>();

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

Metoda AddAzureServiceBusClient provádí následující úlohy:

  • Zaregistruje ServiceBusClient v kontejneru DI pro připojení k Azure Service Bus.
  • Automaticky povolí odpovídající kontroly stavu, protokolování a telemetrii pro příslušné služby.

Do souboru appsettings.json projektu AspireSample.WorkerService přidejte odpovídající informace o připojení:

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

Poznámka

Nezapomeňte nahradit {your_namespace} v URI služby názvem vašeho vlastního oboru názvů ve službě Service Bus.

Zpracování zprávy od odběratele

Když se do fronty messages umístí nová zpráva, měla by pracovní služba načíst, zpracovat a odstranit zprávu. Aktualizujte třídu Worker.cs tak, aby odpovídala následujícímu kódu:

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

Místní spuštění a otestování aplikace

Ukázková aplikace je teď připravená k testování. Ověřte, že se data odesílaná do rozhraní API dostávají do tématu Azure Service Bus a jsou zpracovávána službou odběratele pracovníka.

  1. Spusťte projekt .NET.NET Aspire výběrem tlačítka ladění Spustit nebo stisknutím klávesy F5. Aplikace řídicího panelu .NET.NET Aspire by se měla otevřít v prohlížeči.
  1. Spusťte projekt .NET.NET Aspire výběrem tlačítka ladění Spustit nebo stisknutím klávesy F5. Aplikace řídicího panelu .NET.NET Aspire by se měla otevřít v prohlížeči.
  1. Spusťte projekt .NET.NET Aspire spuštěním dotnet run --project AspireSample.AppHost. Aplikace řídicího panelu .NET.NET Aspire by se měla otevřít v prohlížeči.
  1. Na stránce zdrojů v řádku apiservice vyhledejte odkaz v koncových bodech, který otevře koncový bod weatherforecast. Poznamenejte si číslo portu HTTPS.

  2. Na řídicím panelu .NET.NET Aspire přejděte do protokolů pro aspiresample-workerservice projektu.

  3. V okně terminálu použijte příkaz curl k odeslání testovací zprávy do rozhraní API:

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

    Nezapomeňte nahradit {port} číslem portu z předchozích verzí.

  4. Přepněte zpět na protokoly aspiresample-workerservice. Ve výstupních protokolech by se měla zobrazit testovací zpráva.

Blahopřejeme! Vytvořili jste a nakonfigurovali rozhraní API ASP.NET Core, které se připojuje k Azure Service Bus pomocí integrace Aspire.

Vyčištění prostředků

Spuštěním následujícího příkazu rozhraní příkazového řádku Azure odstraňte skupinu prostředků, pokud už nepotřebujete Azure prostředky, které jste vytvořili. Odstraněním skupiny prostředků se odstraní také prostředky obsažené v této skupině.

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

Další informace najdete v tématu Vyčištění prostředků v Azure.