Skriva kod för att skicka och ta emot meddelanden med hjälp av en kö
Distribuerade program använder Service Bus-köer som tillfälliga lagringsplatser för meddelanden som väntar på leverans till en målkomponent. Om du vill skicka och ta emot meddelanden via en kö måste du skriva kod i både käll- och målkomponenterna.
Överväg Contoso Bicycles-programmet. Kunden kan göra en beställning via en webbplats eller mobilapp. Eftersom webbplatser och mobilappar körs på kundenheter finns det egentligen ingen gräns för hur många beställningar som kan göras samtidigt. Genom att låta mobilappen och webbplatsen sätta in beställningarna i en Service Bus-kö kan serverdelskomponenten (en webbapp) bearbeta beställningar från kön i sin egen takt.
Contoso Bicycles-programmet har faktiskt flera steg för att hantera en ny beställning. Alla steg är beroende av att först auktorisera betalning, så du bestämmer dig för att använda en kö. Den mottagande komponentens första jobb bearbetar betalningen.
Contoso måste skriva kod som lägger till ett meddelande i kön, både i mobilappen och på webbplatsen. I serverdelswebbappen skriver Contoso kod som plockar upp meddelanden från kön.
Här tittar du på processen och övervägandena när du skriver kod för att skicka och ta emot meddelanden med hjälp av en Service Bus-kö.
Azure.Messaging.ServiceBus NuGet-paket
För att göra det enkelt att skriva kod som skickar och tar emot meddelanden via Service Bus tillhandahåller Microsoft ett bibliotek med .NET-klasser. Du kan använda på valfritt .NET-språk för att interagera med en Service Bus-kö eller ett ämne. Du kan inkludera det här biblioteket i ditt program genom att lägga till NuGet-paketet Azure.Messaging.ServiceBus .
Anslutningssträngar och nycklar
Käll- och målkomponenterna behöver två typer av information för att ansluta till en kö i en Service Bus-namnrymd:
- Service Bus-namnområdets plats, även kallat en slutpunkt: Platsen anges som ett fullständigt domännamn i servicebus.windows.net domän. Till exempel: bicycleService.servicebus.windows.net.
- En åtkomstnyckel: Service Bus begränsar åtkomsten till köer eller ämnen genom att kräva en giltig åtkomstnyckel.
Båda dessa uppgifter tillhandahålls till ServiceBusClient-objektet i form av en anslutningssträng. Du kan få rätt anslutningssträng för ditt namnområde från Azure Portal.
Anropa metoder asynkront
Kön i Azure kan finnas tusentals mil från att skicka och ta emot komponenter. Även om den är fysiskt nära kan långsamma anslutningar och bandbreddskonkurretion orsaka fördröjningar när en komponent anropar en metod i kön. Därför gör async
Service Bus-klientbiblioteket metoder tillgängliga för att interagera med köer. Genom att använda de här metoderna kan vi undvika att blockera en tråd medan vi väntar på att anrop ska slutföras.
När du skickar ett meddelande till en kö använder du till exempel metoden SendMessageAsync med nyckelordet await
.
Skicka ett meddelande till en kö
Om du vill skicka ett meddelande till en kö slutför du följande steg.
Lägg till följande using
instruktioner i en kodfil som anropar en Service Bus-kö i valfri komponent som skickar eller tar emot.
using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
Skapa sedan ett nytt ServiceBusClient
objekt och skicka det anslutningssträng och namnet på kön.
// 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);
Du kan skicka ett meddelande till kön genom att anropa ServiceBusSender.SendMessageAsync()
metoden och skicka en 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);
Ta emot meddelanden från en kö
Om du vill ta emot meddelanden måste du först registrera en meddelandehanterare. Meddelandehanteraren är den metod i koden som anropas när ett meddelande är tillgängligt i kön.
// 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;
Utför bearbetningen. I meddelandehanteraren anropar ProcessMessageEventArgs.CompleteMessageAsync()
du sedan metoden för att ta bort meddelandet från kön.
await args.CompleteMessageAsync(args.Message);