Oefening: Berichten verzenden en ontvangen van een Service Bus-wachtrij met behulp van .NET.

Voltooid

In deze oefening leert u het volgende:

  • Maak een Service Bus-naamruimte en -wachtrij met behulp van de Azure CLI.
  • Maak een .NET-consoletoepassing om berichten uit de wachtrij te verzenden en te ontvangen.

Vereisten

Aanmelden bij Azure

In deze sectie opent u de terminal en maakt u enkele variabelen die in de rest van de oefening worden gebruikt om de opdrachtinvoer en het maken van unieke resourcenamen een beetje eenvoudiger te maken.

  1. Start De Azure Cloud Shell en selecteer Bash en de omgeving.

  2. Maak variabelen die worden gebruikt in de Azure CLI-opdrachten. Vervang door <myLocation> een regio bij u in de buurt.

    myLocation=<myLocation>
    myNameSpaceName=az204svcbus$RANDOM
    

Azure-resources maken

  1. Maak een resourcegroep voor het opslaan van de Azure-resources die u maakt.

    az group create --name az204-svcbus-rg --location $myLocation
    
  2. Maak een Service Bus-berichtennaamruimte. Met de volgende opdracht maakt u een naamruimte met behulp van de variabele die u eerder hebt gemaakt. Het duurt enkele minuten voordat de bewerking is voltooid.

    az servicebus namespace create \
        --resource-group az204-svcbus-rg \
        --name $myNameSpaceName \
        --location $myLocation
    
  3. Een Service Bus-wachtrij maken

    az servicebus queue create --resource-group az204-svcbus-rg \
        --namespace-name $myNameSpaceName \
        --name az204-queue
    

De verbindingsreeks voor de Service Bus-naamruimte ophalen

  1. Open Azure Portal en navigeer naar de resourcegroep az204-svcbus-rg .

  2. Selecteer de az204svcbus-resource die u hebt gemaakt.

  3. Selecteer Beleid voor gedeelde toegang in de sectie Instellingen en selecteer vervolgens het beleid RootManageSharedAccessKey .

  4. Kopieer de primaire verbindingsreeks uit het dialoogvenster dat wordt geopend en sla deze op in een bestand, of laat de portal open en kopieer de sleutel wanneer dat nodig is.

Console-app maken om berichten naar de wachtrij te verzenden

  1. Open een lokale terminal en maak een map met de naam az204svcbus en voer vervolgens de opdracht uit om Visual Studio Code te starten.

    code .
    
  2. Open de terminal in Visual Studio Code door Terminal New Terminal te selecteren in de menubalk en voer de volgende opdrachten uit om de console-app te maken en het pakket Azure.Messaging.ServiceBus toe te voegen.>

    dotnet new console
    dotnet add package Azure.Messaging.ServiceBus
    
  3. Voeg in Program.cs de volgende using instructies toe boven aan het bestand na de huidige using instructie.

    using Azure.Messaging.ServiceBus;
    
  4. Voeg de volgende variabelen toe aan de code en stel de connectionString variabele in op de verbindingsreeks die u eerder hebt verkregen.

    // connection string to your Service Bus namespace
    string connectionString = "<CONNECTION STRING>";
    
    // name of your Service Bus topic
    string queueName = "az204-queue";
    
  5. Voeg de volgende code toe onder de variabelen die u zojuist hebt toegevoegd. Zie opmerkingen bij de code voor meer informatie.

    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the sender used to publish messages to the queue
    ServiceBusSender sender;
    
    // Create the clients that we'll use for sending and processing messages.
    client = new ServiceBusClient(connectionString);
    sender = client.CreateSender(queueName);
    
    // create a batch 
    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
    for (int i = 1; i <= 3; i++)
    {
        // try adding a message to the batch
        if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
        {
            // if an exception occurs
            throw new Exception($"Exception {i} has occurred.");
        }
    }
    
    try
    {
        // Use the producer client to send the batch of messages to the Service Bus queue
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of three messages has been published to the queue.");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await sender.DisposeAsync();
        await client.DisposeAsync();
    }
    
    Console.WriteLine("Follow the directions in the exercise to review the results in the Azure portal.");
    Console.WriteLine("Press any key to continue");
    Console.ReadKey();
    
  6. Sla het bestand op en voer de dotnet build opdracht uit om te controleren of er geen fouten zijn.

  7. Voer het programma uit met behulp van de dotnet run opdracht en wacht op het volgende bevestigingsbericht. Druk vervolgens op een willekeurige toets om het programma af te sluiten.

    A batch of three messages has been published to the queue.
    

Resultaten controleren

  1. Meld u aan bij Azure Portal en navigeer naar uw Service Bus-naamruimte.

  2. Selecteer Wachtrijen in de sectie Entiteiten van het navigatiedeelvenster en selecteer vervolgens de az204-queue in de lijst.

  3. Selecteer Service Bus Explorer in het navigatiedeelvenster van de Service Bus-wachtrij.

  4. Selecteer Weergeven vanaf het begin en de drie berichten die zijn verzonden, worden weergegeven.

    Decoratief.

Project bijwerken om berichten naar de wachtrij te ontvangen

In deze sectie werkt u het programma bij voor het ontvangen van berichten uit de wachtrij.

  1. Voeg de volgende code toe aan het einde van de bestaande code. Zie opmerkingen bij de code voor meer informatie.

    ServiceBusProcessor processor;
    client = new ServiceBusClient(connectionString);
    
    // create a processor that we can use to process the messages
    processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. messages is deleted from the queue. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  2. Gebruik de dotnet build opdracht om ervoor te zorgen dat er geen fouten zijn.

  3. Gebruik de dotnet run opdracht om de toepassing uit te voeren. Er worden nog drie berichten naar de wachtrij verzonden en vervolgens alle zes berichten opgehaald. Druk op een willekeurige toets om de ontvanger en de toepassing te stoppen.

    Wait for a minute and then press any key to end the processing
    Received: Message 1
    Received: Message 2
    Received: Message 3
    Received: Message 1
    Received: Message 2
    Received: Message 3
    
    Stopping the receiver...
    Stopped receiving messages
    

    Notitie

    Omdat de toepassing twee batches berichten heeft verzonden voordat deze worden opgehaald, ziet u twee batches van drie berichten die in de uitvoer worden weergegeven.

  4. Ga terug naar de portal en selecteer Opnieuw bekijken vanaf het begin . U ziet dat er geen berichten in de wachtrij worden weergegeven omdat we ze allemaal hebben opgehaald.

Resources opschonen

Wanneer de resources niet meer nodig zijn, kunt u de az group delete opdracht in Azure Cloud Shell gebruiken om de resourcegroep te verwijderen.

az group delete --name az204-svcbus-rg --no-wait