Aan de slag met Azure Service Bus wachtrijen (.NET)
In deze quickstart gaat u de volgende stappen volgen:
- Een Service Bus-naamruimte maken met de Azure-portal.
- Een Service Bus-wachtrij maken met de Azure-portal.
- Schrijf een .NET Core-consoletoepassing om een set berichten naar de wachtrij te verzenden.
- Schrijf een .NET Core-consoletoepassing om deze berichten van de wachtrij te ontvangen.
Notitie
Deze quickstart bevat stapsgewijs instructies voor het implementeren van een eenvoudig scenario voor het verzenden van een batch berichten naar Service Bus wachtrij en het ontvangen ervan. Zie .NET-voorbeeldenop Service Bus voor meer voorbeelden over andere en geavanceerde GitHub.
Vereisten
Als u nog geen tijd hebt met de service, bekijkt Service Bus overzicht voordat u deze quickstart gaat doen.
- Azure-abonnement. Als u Azure-services wilt gebruiken, Service Bus Azure-services, hebt u een abonnement nodig. Als u geen bestaand Azure-account hebt, kunt u zich registreren voor een gratis proefversie.
- Microsoft Visual Studio 2019. De Azure Service Bus-clientbibliotheek maakt gebruik van nieuwe functies die zijn geïntroduceerd in C# 8.0. U kunt de bibliotheek nog steeds gebruiken met eerdere versies van C#, maar de nieuwe syntaxis is dan niet beschikbaar. Als u gebruik wilt maken van de volledige syntaxis, raden we u aan om te compileren met de .NET Core SDK 3.0 of hoger en de taalversie in te stellen op
latest. Als u Visual Studio gebruikt, weet dan dat de versies vóór Visual Studio 2019 niet compatibel met de hulpprogramma's die nodig zijn om C# 8.0 projecten te bouwen.
Een naamruimte in Azure Portal maken
Als u Service Bus-berichtenentiteiten wilt gebruiken in Azure, moet u eerst een naamruimte maken met een naam die uniek is binnen Azure. Een naamruimte biedt een scoping container voor het verwerken van Service Bus-resources in uw toepassing.
Ga als volgt te werk om een naamruimte te maken:
Meld u aan bij Azure Portal
Klik in het linkernavigatievenster van de portal achtereenvolgens op + Een resource maken, Integratie en Service Bus.
Volg deze stappen in de tag Basisbeginselen van de pagina Naamruimte maken:
Kies voor Abonnement een Azure-abonnement waarin u de naamruimte maakt.
Kies voor Resourcegroep een bestaande resourcegroep waarin de naamruimte moet worden opgenomen of maak een nieuwe resourcegroep.
Voer een naam in voor de naamruimte. In het systeem wordt onmiddellijk gecontroleerd of de naam beschikbaar is. Raadpleeg Create Namespace (Naamruimte maken) voor een lijst met regels voor het benoemen van naamruimtes.
Kies voor Locatie de regio waarin uw naamruimte moet worden gehost.
Selecteer bij Prijscategorie de prijscategorie (Basic, Standard of Premium) voor de naamruimte. Voor deze snelstart selecteert u Standaard.
Kies Standard of Premium indien u gebruik wilt maken van onderwerpen en abonnementen. Onderwerpen/abonnementen worden niet ondersteund in de prijscategorie Basic.
Als u de prijscategorie Premium, geeft u het aantal berichteneenheden op. De Premium-prijscategorie biedt isolatie van resources op het niveau van de CPU en het geheugen, zodat elke workload geïsoleerd wordt uitgevoerd. Deze resourcecontainer wordt een Messaging-eenheid genoemd. Een Premium-naamruimte heeft ten minste één Messaging-eenheid. U kunt voor elke Service Bus Premium-naamruimte 1, 2 of 4 Messaging-eenheden selecteren. Zie Service Bus Premium Messaging voor meer informatie.
Selecteer Controleren + maken. Uw naamruimte wordt nu gemaakt en ingeschakeld. U moet wellicht enkele minuten wachten terwijl de resources voor uw account worden ingericht.
Controleer de instellingen op de pagina Beoordelen en maken en selecteer Maken.
Selecteer Ga naar resource op de implementatiepagina.
U ziet de startpagina voor uw Service Bus-naamruimte.
De verbindingsreeks ophalen
Het maken van een nieuwe naamruimte genereert automatisch een eerste Shared Access Signature-beleid (SAS) met primaire en secundaire sleutels en primaire en secundaire verbindingsreeksen die elk volledige controle over alle aspecten van de naamruimte verlenen. Raadpleeg Service Bus-verificatie en -autorisatie voor meer informatie over het maken van regels met beperktere rechten voor reguliere afzenders en ontvangers.
Als u de primaire connection string voor uw naamruimte wilt kopiëren, volgt u deze stappen:
Selecteer op Service Bus pagina Naamruimte de optie Beleid voor gedeelde toegang in het menu links.
Selecteer op de pagina Beleid voor gedeelde toegang de optie RootManageSharedAccessKey.
Klik in het venster Beleid: RootManageSharedAccessKey op de knop Kopiëren naast Primaire verbindingsreeks om de verbindingsreeks naar het klembord te kopiëren voor later gebruik. Plak deze waarde in Kladblok of een andere tijdelijke locatie.
U kunt deze pagina gebruiken om de primaire sleutel, secundaire sleutel en secundaire sleutel te connection string.
Een wachtrij maken in de Microsoft Azure-portal
Selecteer op de pagina Service Bus-naamruimte de optie Wachtrijen in het linkernavigatiemenu.
Selecteer op de pagina Wachtrijen de optie + Wachtrij op de werkbalk.
Voer een naam voor de wachtrij in en hanteer voor de andere waarden de standaardinstellingen.
Selecteer nu Maken.
Berichten naar de wachtrij verzenden
In deze sectie ziet u hoe u een .NET Core-consoletoepassing maakt om berichten te verzenden naar Service Bus wachtrij.
Notitie
Deze quickstart bevat stapsgewijs instructies voor het implementeren van een eenvoudig scenario voor het verzenden van een batch berichten naar Service Bus wachtrij en het ontvangen ervan. Zie .NET-voorbeeldenop Service Bus voor meer voorbeelden over andere en geavanceerde GitHub.
Een consoletoepassing maken
Start Visual Studio 2019.
Selecteer Een nieuw project maken.
Voer in het dialoogvenster Een nieuw project maken de volgende stappen uit: Als dit dialoogvenster niet wordt weergegeven, selecteert u in het menu Bestand, Nieuw en vervolgens Project.
Selecteer de programmeertaal C# .
Selecteer Console als het type toepassing.
Selecteer Consoletoepassing in de lijst met resultaten.
Selecteer vervolgens Volgende.
Voer QueueSender in als naam van het project, ServiceBusQueueQuickStart als naam van de oplossing en selecteer volgende.
Selecteer op de pagina Aanvullende informatie Maken om de oplossing en het project te maken.
Het Service Bus NuGet-pakket toevoegen
Selecteer Tools > NuGet-pakketbeheer > Package Manager Console in het menu.
Voer de volgende opdracht uit om het NuGet-pakket Azure.Messaging.ServiceBus te installeren:
Install-Package Azure.Messaging.ServiceBus
Code toevoegen om berichten naar de wachtrij te verzenden
Voeg in Program.cs de volgende instructies toe boven aan de naamruimtedefinitie,
usingvóór de klassedeclaratie.using System.Threading.Tasks; using Azure.Messaging.ServiceBus;Declareer
Programbinnen de klasse de volgende eigenschappen, net vóór de methodeMain.Vervang
<NAMESPACE CONNECTION STRING>door de primaire connection string uw Service Bus naamruimte. En vervang door<QUEUE NAME>de naam van uw wachtrij.// connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the sender used to publish messages to the queue static ServiceBusSender sender; // number of messages to be sent to the queue private const int numOfMessages = 3;Vervang code in de
Mainmethode door de volgende code. Zie opmerkingen bij de code voor meer informatie over de code. Hier volgen de belangrijke stappen uit de code.Hiermee maakt u een ServiceBusClient-object met behulp van de primaire connection string naar de naamruimte.
Roept de methode CreateSender aan op het ServiceBusClient-object om een ServiceBusSender-object te maken voor de Service Bus wachtrij.
Hiermee maakt u een ServiceBusMessageBatch-object met behulp van de methode ServiceBusSender.CreateMessageBatchAsync.
Voeg berichten toe aan de batch met behulp van de ServiceBusMessageBatch.TryAddMessage.
Verzendt de batch berichten naar de Service Bus wachtrij met behulp van de methode ServiceBusSender.SendMessagesAsync.
static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // 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 <= numOfMessages; i++) { // try adding a message to the batch if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}"))) { // if it is too large for the batch throw new Exception($"The message {i} is too large to fit in the batch."); } } 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 {numOfMessages} 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("Press any key to end the application"); Console.ReadKey(); }
Het bestand Program.cs moet er als volgende uitzien:
using System; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; namespace QueueSender { class Program { // connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the sender used to publish messages to the queue static ServiceBusSender sender; // number of messages to be sent to the queue private const int numOfMessages = 3; static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // 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 <= numOfMessages; i++) { // try adding a message to the batch if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}"))) { // if it is too large for the batch throw new Exception($"The message {i} is too large to fit in the batch."); } } 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 {numOfMessages} 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("Press any key to end the application"); Console.ReadKey(); } } }Vervang
<NAMESPACE CONNECTION STRING>door de primaire connection string uw Service Bus naamruimte. En vervang door<QUEUE NAME>de naam van uw wachtrij.Bouw het project en controleer of er geen fouten zijn.
Voer het programma uit en wacht op het bevestigingsbericht.
A batch of 3 messages has been published to the queueVolg deze stappen in Azure Portal:
Navigeer naar uw Service Bus-naamruimte.
Selecteer op de pagina Overzicht de wachtrij in het deelvenster in het midden onderaan.
Let op de waarden in de sectie Essentials.
Let op de volgende waarden:
- De waarde voor Aantal actieve berichten voor de wachtrij is nu 3. Telkens wanneer u deze afzender-app uit te voeren zonder de berichten op te haalt, wordt deze waarde met 3 verhoogd.
- De huidige grootte van de wachtrij wordt verhoogd telkens als de app berichten aan de wachtrij toevoegt.
- In de grafiek Berichten in de onderste sectie Metrische gegevens ziet u dat er drie inkomende berichten voor de wachtrij zijn.
Berichten ontvangen uit de wachtrij
In deze sectie maakt u een .NET Core-consoletoepassing die berichten van de wachtrij ontvangt.
Notitie
Deze quickstart bevat stapsgewijs instructies voor het implementeren van een eenvoudig scenario voor het verzenden van een batch berichten naar Service Bus wachtrij en het ontvangen ervan. Zie .NET-voorbeeldenop Service Bus voor meer voorbeelden over andere en geavanceerde GitHub.
Een project maken voor de ontvanger
- Klik in Solution Explorer venster met de rechtermuisknop op de oplossing ServiceBusQueueQuickStart, wijs Toevoegen aan en selecteer Nieuw Project.
- Selecteer Consoletoepassing en selecteer Volgende.
- Voer QueueReceiver in als Project naam en selecteer Maken.
- Klik in Solution Explorer venster met de rechtermuisknop op QueueReceiver en selecteer Set as a Startup Project.
Het Service Bus NuGet-pakket toevoegen
Selecteer Tools > NuGet-pakketbeheer > Package Manager Console in het menu.
Controleer in Pakketbeheer Console of QueueReceiver is geselecteerd voor het standaardproject. Als dat niet het beste is, gebruikt u de vervolgkeuzelijst om QueueReceiver te selecteren.
Voer de volgende opdracht uit om het NuGet-pakket Azure.Messaging.ServiceBus te installeren:
Install-Package Azure.Messaging.ServiceBus
De code toevoegen om berichten van de wachtrij te ontvangen
In deze sectie voegt u code toe om berichten uit de wachtrij op te halen.
Voeg in Program.cs de volgende instructies toe boven aan de naamruimtedefinitie,
usingvóór de klassedeclaratie.using System.Threading.Tasks; using Azure.Messaging.ServiceBus;Declareer
Programbinnen de klasse de volgende eigenschappen, net vóór de methodeMain.Vervang
<NAMESPACE CONNECTION STRING>door de primaire connection string uw Service Bus naamruimte. En vervang door<QUEUE NAME>de naam van uw wachtrij.// connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the processor that reads and processes messages from the queue static ServiceBusProcessor processor;Voeg de volgende methoden toe aan de
Programklasse om ontvangen berichten en eventuele fouten af te handelen.// handle received messages static 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 static Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; }Vervang code in de
Mainmethode door de volgende code. Zie opmerkingen bij de code voor meer informatie over de code. Hier volgen de belangrijke stappen uit de code.Hiermee maakt u een ServiceBusClient-object met behulp van de primaire connection string naar de naamruimte.
Roept de methode CreateProcessor aan op het ServiceBusClient-object om een ServiceBusProcessor-object te maken voor de Service Bus wachtrij.
Hiermee geeft u handlers op voor de processMessageAsync- en ProcessErrorAsync-gebeurtenissen van het ServiceBusProcessor-object.
Begint met het verwerken van berichten door het Aanroepen van StartProcessingAsync op het ServiceBusProcessor-object.
Wanneer de gebruiker op een toets drukt om de verwerking te beëindigen, roept de StopProcessingAsync aan op het ServiceBusProcessor-object.
Zie opmerkingen bij de code voor meer informatie.
static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the client object that will be used to create sender and receiver objects 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(); } }
Zo zou uw
Program.cseruit moeten zien:using System; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; namespace QueueReceiver { class Program { // connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the processor that reads and processes messages from the queue static ServiceBusProcessor processor; // handle received messages static 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 static Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; } static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the client object that will be used to create sender and receiver objects 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(); } } } }Vervang
<NAMESPACE CONNECTION STRING>door de primaire connection string uw Service Bus naamruimte. En vervang door<QUEUE NAME>de naam van uw wachtrij.Bouw het project en controleer of er geen fouten zijn.
Voer de ontvangende toepassing uit. Als het goed is, ziet u de ontvangen berichten. Druk op een 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 Stopping the receiver... Stopped receiving messagesControleer de portal opnieuw. Wacht enkele minuten en vernieuw de pagina als er geen actieve
0berichten worden weergegeven.
Volgende stappen
Raadpleeg de volgende documentatie en voorbeelden: