Code schrijven om berichten te verzenden en te ontvangen met behulp van een wachtrij

Voltooid

Gedistribueerde toepassingen gebruiken Service Bus-wachtrijen als tijdelijke opslaglocaties voor berichten die wachten op levering aan een doelonderdeel. Als u berichten via een wachtrij wilt verzenden en ontvangen, moet u code schrijven in zowel de bron- als doelonderdelen.

Overweeg de toepassing Contoso Bicycles. De klant kan een bestelling plaatsen via een website of mobiele app. Omdat websites en mobiele apps worden uitgevoerd op klantapparaten, is er echt geen limiet voor het aantal bestellingen tegelijk. Door de mobiele app en website de orders in een Service Bus-wachtrij te laten storten, kan het back-endonderdeel (een web-app) orders uit die wachtrij in zijn eigen tempo verwerken.

De contoso bicycles-toepassing heeft eigenlijk verschillende stappen voor het afhandelen van een nieuwe bestelling. Alle stappen zijn afhankelijk van het eerste autoriseren van betaling, dus u besluit een wachtrij te gebruiken. De eerste taak van het ontvangende onderdeel verwerkt de betaling.

In de mobiele app en op de website moet Contoso code schrijven waarmee een bericht aan de wachtrij wordt toegevoegd. In de back-endweb-app schrijft Contoso code die berichten uit de wachtrij ophaalt.

Hier bekijkt u het proces en de overwegingen bij het schrijven van code voor het verzenden en ontvangen van berichten met behulp van een Service Bus-wachtrij.

Azure.Messaging.ServiceBus NuGet-pakket

Microsoft biedt een bibliotheek met .NET-klassen om eenvoudig code te schrijven waarmee berichten via Service Bus worden verzonden en ontvangen. U kunt in elke .NET-taal gebruiken om te communiceren met een Service Bus-wachtrij of -onderwerp. U kunt deze bibliotheek opnemen in uw toepassing door het NuGet-pakket Azure.Messaging.ServiceBus toe te voegen.

Verbindingsreeksen en sleutels

Brononderdelen en doelonderdelen hebben beide twee soorten informatie nodig om verbinding te maken met een wachtrij in een Service Bus-naamruimte:

  • De locatie van de Service Bus-naamruimte, ook wel een eindpunt genoemd: de locatie wordt opgegeven als een volledig gekwalificeerde domeinnaam binnen het servicebus.windows.net domein. Bijvoorbeeld: bicycleService.servicebus.windows.net.
  • Een toegangssleutel: Service Bus beperkt de toegang tot wachtrijen of onderwerpen door een geldige toegangssleutel te vereisen.

Beide gegevens worden verstrekt aan het ServiceBusClient-object in de vorm van een verbindingsreeks. U kunt de juiste verbindingsreeks voor uw naamruimte ophalen vanuit Azure Portal.

Methoden asynchroon aanroepen

De wachtrij in Azure bevindt zich mogelijk duizenden kilometers van het verzenden en ontvangen van onderdelen. Zelfs als het fysiek dicht is, kunnen trage verbindingen en bandbreedteconflicten vertragingen veroorzaken wanneer een onderdeel een methode aanroept in de wachtrij. Daarom maakt async de Service Bus-clientbibliotheek methoden beschikbaar voor interactie met wachtrijen. We gebruiken deze methoden om te voorkomen dat een thread wordt geblokkeerd tijdens het wachten totdat aanroepen zijn voltooid.

Wanneer u bijvoorbeeld een bericht naar een wachtrij verzendt, gebruikt u de methode SendMessageAsync met het await trefwoord.

Een bericht verzenden naar een wachtrij

Als u een bericht naar een wachtrij wilt verzenden, voert u de volgende stappen uit.

Voeg in elk verzendend of ontvangend onderdeel de volgende using instructies toe aan elk codebestand dat een Service Bus-wachtrij aanroept.

using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;

Maak vervolgens een nieuw ServiceBusClient object en geef het door aan de verbindingsreeks en de naam van de wachtrij.

// Create a ServiceBusClient object using the connection string to the namespace.
await using var client = new ServiceBusClient(connectionString);
    
// Create a ServiceBusSender object by invoking the CreateSender method on the ServiceBusClient object, and specifying the queue name. 
ServiceBusSender sender = client.CreateSender(queueName);

U kunt een bericht naar de wachtrij verzenden door de ServiceBusSender.SendMessageAsync() methode aan te roepen en een ServiceBusMessage.

// Create a new message to send to the queue.
string messageContent = "Order new crankshaft for eBike.";
var message = new ServiceBusMessage(messageContent);

// Send the message to the queue.
await sender.SendMessageAsync(message);

Berichten ontvangen uit een wachtrij

Als u berichten wilt ontvangen, moet u eerst een berichtenhandler registreren. De berichthandler is de methode in uw code die wordt aangeroepen wanneer een bericht beschikbaar is in de wachtrij.

// Create a ServiceBusProcessor for the queue.
await using ServiceBusProcessor processor = client.CreateProcessor(queueName, options);
    
// Specify handler methods for messages and errors.
processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;

Voer uw verwerking uit. Roep vervolgens in de berichtenhandler de ProcessMessageEventArgs.CompleteMessageAsync() methode aan om het bericht uit de wachtrij te verwijderen.

await args.CompleteMessageAsync(args.Message);