Delen via


Handleiding: Het Gebruik van .NET Aspire berichtenintegraties in ASP.NET Core

Cloudeigen apps vereisen vaak schaalbare berichtenoplossingen die mogelijkheden bieden, zoals berichtenwachtrijen en onderwerpen en abonnementen. .NET Aspire integraties vereenvoudigen het proces van het maken van verbinding met verschillende berichtenproviders, zoals Azure Service Bus. In deze zelfstudie maakt u een ASP.NET Core-app die gebruikmaakt van .NET Aspire-integraties om verbinding te maken met Azure Service Bus om een systeem voor meldingen te maken. Ingediende berichten worden verzonden naar een Service Bus-onderwerp voor gebruik door abonnees. U leert het volgende:

  • Een eenvoudige .NET-app maken die is ingesteld voor het gebruik van .NET Aspire-integraties
  • Een .NET Aspire-integratie toevoegen om verbinding te maken met Azure Service Bus
  • Integratiefuncties voor .NET.NET Aspire configureren en gebruiken om gegevens te verzenden en te ontvangen

Voorwaarden

Als u met .NET.NET Aspirewilt werken, hebt u het volgende lokaal geïnstalleerd:

Zie .NET.NET Aspire setup en hulpprogramma'sen .NET.NET Aspire SDK-voor meer informatie.

Naast de voorgaande vereisten moet u ook de Azure CLI installeren. Als u de Azure CLI wilt installeren, volgt u de instructies in de Azure CLI-installatiehandleiding.

Het Azure Service Bus-account instellen

Voor deze zelfstudie hebt u toegang nodig tot een Azure Service Bus naamruimte met een onderwerp en abonnement geconfigureerd. Gebruik een van de volgende opties om de vereiste resources in te stellen:

U kunt ook:

  • Azure CLI-: voer de volgende opdrachten uit in de Azure CLI of CloudShell om de vereiste Azure Service Bus resources in te stellen:

    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
    

    Notitie

    Vervang de uw-resourcegroepnaam en uw-naamruimtenaam plaatsaanduidingen door uw eigen waarden. Namen van Service Bus-naamruimten moeten wereldwijd uniek zijn in Azure.

Azure verificatie

Deze quickstart kan worden voltooid met behulp van verificatie zonder wachtwoord of een verbindingsreeks. Verbindingen zonder wachtwoord maken gebruik van Azure Active Directory en op rollen gebaseerd toegangsbeheer (RBAC) om verbinding te maken met een Service Bus-naamruimte. U hoeft zich geen zorgen te maken over een in code vastgelegde verbindingsreeks in uw code, een configuratiebestand of in beveiligde opslag, zoals Azure Key Vault.

U kunt ook een verbindingsreeks gebruiken om verbinding te maken met een Service Bus-naamruimte, maar de benadering zonder wachtwoord wordt aanbevolen voor echte toepassingen en productieomgevingen. Lees voor meer informatie over verificatie en autorisatie of bezoek de wachtwoordloze overzichtspagina.

Wijs in uw Service Bus-naamruimte de volgende rol toe aan het gebruikersaccount waarmee u bent aangemeld bij Visual Studio of de Azure CLI met:

  • Service Bus-gegevenseigenaar: een RBAC-rol toewijzen Azure

De voorbeeldoplossing maken

Als u een nieuwe .NET Aspire Starter-toepassing wilt maken, kunt u Visual Studio, Visual Studio Codeof de .NET CLI gebruiken.

Visual Studio biedt .NET Aspire sjablonen die enkele initiële configuraties voor u verwerken. Voer de volgende stappen uit om een project te maken voor deze quickstart:

  1. Ga boven in Visual Studionaar Bestand>Nieuw>Project.

  2. Zoek in het dialoogvenster naar Aspire en selecteer .NET.NET Aspire Starter-app. Selecteer Volgende.

    Een schermopname van de sjabloon .NET.NET Aspire Starter-app.

  3. In het scherm Uw nieuwe project configureren:

    • Voer een projectnaam van AspireSamplein.
    • Laat de rest van de waarden op de standaardinstellingen staan en selecteer Volgende.
  4. Op het scherm Aanvullende informatie:

    • Zorg ervoor dat .NET 9.0 (Standaard Term Ondersteuning) is geselecteerd.
    • Zorg ervoor dat Redis gebruiken voor caching (hiervoor is een ondersteunde containerruntime vereist) is ingeschakeld en selecteer maken.
    • U kunt desgewenst Een testproject makenselecteren. Voor meer informatie, zie Schrijf je eerste .NET.NET Aspire test.

Visual Studio maakt een nieuwe oplossing die is gestructureerd om .NET Aspirete gebruiken.

Visual Studio Code biedt .NET Aspire projectsjablonen die enkele initiële configuraties voor u verwerken. Voer de volgende stappen uit om een project te maken voor deze quickstart:

  1. Selecteer vanuit een nieuw exemplaar van Visual Studio Code (zonder een map geopend te hebben) de knop om een .NET project met de knop te maken.

  2. Selecteer de sjabloon .NET.NET Aspire Starter-app.

    Een schermopname van de sjabloon .NET.NET Aspire Starter-app.

Als u de .NET.NET Aspire-sjablonen nog niet hebt geïnstalleerd, voert u de volgende dotnet new install opdracht uit:

dotnet new install Aspire.ProjectTemplates

De voorgaande .NET CLI-opdracht zorgt ervoor dat de .NET Aspire sjablonen beschikbaar zijn. Als u de .NET.NET Aspire Starter-app wilt maken op basis van de sjabloon, voert u de volgende dotnet new opdracht uit:

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

Voor meer informatie, zie dotnet new. De .NET CLI maakt een nieuwe oplossing die is gestructureerd voor het gebruik van .NET Aspire.

Het Worker Service-project toevoegen

Voeg vervolgens een Worker Service project toe aan de oplossing om berichten van en naar Azure Service Busop te halen en te verwerken.

  1. Klik in Solution Explorer met de rechtermuisknop op het bovenste AspireSample oplossingsknooppunt en selecteer Toevoegen>Nieuw project.
  2. Zoek en selecteer de sjabloon Worker Service en kies Volgende.
  3. Voor de projectnaam , voer AspireSample.WorkerService in en selecteer Volgende.
  4. Op het scherm Aanvullende informatie:
    • Zorg ervoor dat .NET 9,0 is geselecteerd.
    • Zorg ervoor dat Enlist in .NET.NET Aspire orchestratie is ingeschakeld en selecteer Create.

Visual Studio het project aan uw oplossing toevoegt en het Program.cs-bestand van het AspireSample.AppHost project bijwerkt met een nieuwe coderegel:

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

Visual Studio hulpprogramma's hebben deze coderegel toegevoegd om uw nieuwe project te registreren bij het IDistributedApplicationBuilder-object, waardoor u later de orkestratiefuncties kunt verkennen.

  1. Selecteer in de Solution Explorer- in Visual Studio Codede knop + naast de naam van de oplossing om een nieuw project toe te voegen aan de oplossing:

    Visual Studio Code: Nieuw project toevoegen vanuit C# DevKit Solution Explorer.

  2. Als u de projectsjablonen wilt filteren, voert u Worker- in het zoekvak in en selecteert u de Worker Service sjabloon die is gevonden:

    Visual Studio Code: Filter naar het Worker Service-projectsjabloon vanuit Project toevoegen.

  3. Kies de Worker Service-sjabloon en voer de projectnaam in als AspireSample.WorkerService.

  4. Selecteer standaardmap om het project te maken in dezelfde map als de oplossing.

  5. Selecteer Project maken om het project toe te voegen aan de oplossing.

  6. Klik met de rechtermuisknop op het project AspireSample.AppHost in Solution Explorer en selecteer Projectverwijzing toevoegen:

    Visual Studio Code: Projectverwijzing toevoegen van AspireSample.AppHost aan AspireSample.WorkerService.

  7. Voeg de volgende coderegel toe aan het Program.cs-bestand in het project AspireSample.AppHost voordat de aanroep naar builder.Build().Run();:

    builder.AddProject<Projects.AspireSample_WorkerService>(
        "aspiresample-workerservice");
    
  1. Gebruik in de hoofdmap van de app de opdracht dotnet new om een nieuwe Worker Service-app te maken:

    dotnet new worker --name AspireSample.WorkerService
    
  2. Gebruik de opdracht dotnet sln om het project toe te voegen aan de oplossing:

    dotnet sln AspireSample.sln add AspireSample.WorkerService/AspireSample.WorkerService.csproj
    
  3. Gebruik de opdracht dotnet add om een projectreferentie toe te voegen tussen de . AppHost- en . WorkerService project:

    dotnet add AspireSample.AppHost/AspireSample.AppHost.csproj reference AspireSample.WorkerService/AspireSample.WorkerService.csproj
    
  4. Voeg de volgende coderegel toe aan het Program.cs-bestand in het project AspireSample.AppHost voordat de aanroep naar builder.Build().Run();:

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

De voltooide oplossingsstructuur moet er ongeveer als volgt uitzien, ervan uitgaande dat de bovenste map de naam aspire-messagingheeft:

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

De .NET.NET Aspire-integratie toevoegen aan de API

Voeg de .NET Aspire Azure Service Bus-integratie toe aan uw AspireSample.ApiService-app:

  1. Dubbelklik in de Solution Explorer-op het bestand AspireSample.ApiService.csproj om het XML-bestand te openen.

  2. Voeg het volgende <PackageReference> item toe aan het <ItemGroup>-element:

    <ItemGroup>
        <PackageReference Include="Aspire.Azure.Messaging.ServiceBus"
                          Version="8.0.1" />
    </ItemGroup>
    
  1. Klik in Solution Explorermet de rechtermuisknop op het project AspireSample.ApiService en selecteer NuGet-pakket toevoegen:

    Visual Studio Code: Voeg het NuGet-pakket toe aan het Project AspireSample.ApiService.

  2. Voer Aspirein.Azure. Messaging.ServiceBus in het zoekvak en selecteer het pakket in de lijst.

  3. Selecteer de (meest recente) versie om het pakket te installeren.

dotnet add package Aspire.Azure.Messaging.ServiceBus

Voeg in het Program.cs-bestand van het project AspireSample.ApiService een aanroep toe aan de AddAzureServiceBusClient-extensiemethode, waarbij u de bestaande aanroep naar AddServiceDefaultsvervangt:

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

Zie AddAzureServiceBusClientvoor meer informatie.

Met deze methode worden de volgende taken uitgevoerd:

  • Registreert een ServiceBusClient met de DI-container om verbinding te maken met Azure Service Bus.
  • Hiermee worden automatisch bijbehorende statuscontroles, logboekregistratie en telemetrie ingeschakeld voor de respectieve services.

Voeg in het appsettings.json-bestand van hetzelfde project de bijbehorende verbindingsgegevens toe:

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

Notitie

Vervang {your_namespace} in de service-URI's door de naam van uw eigen Service Bus-naamruimte.

Het API-eindpunt maken

De API moet een eindpunt opgeven voor het ontvangen van gegevens en deze publiceren naar het Service Bus-onderwerp en uitzenden naar abonnees. Voeg het volgende eindpunt toe aan het project AspireSample.ApiService om een bericht naar het Service Bus-onderwerp te verzenden. Vervang alle inhoud van het bestand Program.cs door de volgende C#-code:

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

De .NET Aspire-integratie toevoegen aan de Worker Service

Voeg de .NET Aspire Azure Service Bus-integratie toe aan uw AspireSample.WorkerService project. Volg dezelfde stappen als u eerder hebt gedaan toen u het NuGet-pakket Aspire.Azure.Messaging.ServiceBus toevoegde aan het project AspireSample.ApiService. Zodra deze is toegevoegd, kunt u de werkerservice configureren om berichten van het Service Bus-topic te verwerken.

In het Program.cs-bestand van het project AspireSample.WorkerService kunt u de bestaande code als volgt opnieuw uitvoeren:

using AspireSample.WorkerService;

var builder = Host.CreateApplicationBuilder(args);

builder.AddAzureServiceBusClient("serviceBusConnection");

builder.Services.AddHostedService<Worker>();

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

Met de methode AddAzureServiceBusClient worden de volgende taken uitgevoerd:

  • Registreert een ServiceBusClient met de DI-container om verbinding te maken met Azure Service Bus.
  • Hiermee worden automatisch bijbehorende statuscontroles, logboekregistratie en telemetrie ingeschakeld voor de respectieve services.

Voeg in het appsettings.json bestand van het project AspireSample.WorkerService de bijbehorende verbindingsgegevens toe:

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

Notitie

Zorg ervoor dat u {your_namespace} in de Service-URI's vervangt door de naam van uw eigen Service Bus-naamruimte.

Het bericht van de abonnee verwerken

Wanneer een nieuw bericht in de messages wachtrij wordt geplaatst, moet de achtergrondservice het bericht ophalen, verwerken en verwijderen. Werk de Worker.cs-klasse bij zodat deze overeenkomt met de volgende code:

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

De app lokaal uitvoeren en testen

De voorbeeld-app is nu klaar voor testen. Controleer of de gegevens die naar de API worden verzonden, worden verzonden naar het Azure Service Bus onderwerp en worden gebruikt door de abonneewerkrolservice:

  1. Start het .NET.NET Aspire project door de knop Start foutopsporing te selecteren of door op F5-te drukken. De .NET.NET Aspire dashboard-app moet worden geopend in de browser.
  1. Start het .NET.NET Aspire project door de knop Start foutopsporing te selecteren of door op F5-te drukken. De .NET.NET Aspire dashboard-app moet worden geopend in de browser.
  1. Start het .NET.NET Aspire project door dotnet run --project AspireSample.AppHostuit te voeren. De .NET.NET Aspire dashboard-app moet worden geopend in de browser.
  1. Zoek op de resources-pagina in de rij apiservice de koppeling in de Eindpunten waarmee het weatherforecast-eindpunt wordt geopend. Noteer het HTTPS-poortnummer.

  2. Navigeer naar het .NET.NET Aspire-dashboard en vervolgens naar de logboeken voor het aspiresample-workerservice-project.

  3. Gebruik in een terminalvenster de opdracht curl om een testbericht naar de API te verzenden:

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

    Zorg ervoor dat u {port} vervangt door het poortnummer van eerder.

  4. Ga terug naar de aspiresample-workerservice logboeken. U ziet nu het testbericht dat in de uitvoerlogboeken wordt afgedrukt.

Gefeliciteerd! U hebt een ASP.NET Core-API gemaakt en geconfigureerd die verbinding maakt met Azure Service Bus met behulp van Aspire-integraties.

De middelen opschonen

Voer de volgende Azure CLI-opdracht uit om de resourcegroep te verwijderen wanneer u de Azure resources die u hebt gemaakt niet meer nodig hebt. Als u de resourcegroep verwijdert, worden ook de resources in de resourcegroep verwijderd.

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

Zie Resources opschonen in Azurevoor meer informatie.