Kom igång med Azure Service Bus-köer (.NET)
I den här snabbstarten gör du följande:
- Skapa ett Service Bus-namnområde med Azure Portal.
- Skapa en Service Bus-kö med Azure Portal.
- Skriva ett .NET Core-konsolprogram för att skicka en uppsättning meddelanden till kön.
- Skriva ett .NET Core-konsolprogram för att ta emot meddelandena från kön.
Anteckning
Den här snabbstarten innehåller stegvisa instruktioner för att implementera ett enkelt scenario för att skicka en batch med meddelanden till en Service Bus-kö och sedan ta emot dem. Fler exempel på andra och avancerade scenarier finns i Service Bus .NET-exempel på GitHub.
Förutsättningar
Om du inte har börjat använda tjänsten kan du Service Bus översikt innan du gör den här snabbstarten.
- Azure-prenumeration. Om du vill använda Azure-tjänster, Service Bus Azure-tjänster, behöver du en prenumeration. Om du inte har ett befintligt Azure-konto kan du registrera dig för en kostnadsfri utvärderingsversion.
- Microsoft Visual Studio 2019. Azure Service Bus-klientbiblioteket använder nya funktioner som introducerades i C# 8.0. Du kan fortfarande använda biblioteket med tidigare C#-språkversioner, men den nya syntaxen är inte tillgänglig. Om du vill använda den fullständiga syntaxen rekommenderar vi att du kompilerar med .NET Core SDK 3.0 eller senare och språkversionen är inställd på
latest. Om du använder Visual Studio är versioner före Visual Studio 2019 inte kompatibla med de verktyg som behövs för att skapa C# 8.0-projekt.
Skapa ett namnområde i Azure Portal
För att komma igång med Service Bus-meddelandeentiteter i Azure måste du först skapa ett namnområde med ett namn som är unikt i Azure. Ett namnområde innehåller en omfattningscontainer för adressering av Service Bus-resurser i ditt program.
Så här skapar du ett namnområde:
Logga in på Azure-portalen
I det vänstra navigeringsfältet i portalen väljer du + Skapa en resurs följt av Integration och sedan Service Bus.
I taggen Grundläggande på sidan Skapa namnområde följer du dessa steg:
För Prenumeration väljer du en Azure-prenumeration där du ska skapa namnrymden.
För Resursgrupp väljer du en befintlig resursgrupp där namnrymden ska finnas, eller så skapar du en ny.
Ange ett namn för namnrymden. Systemet kontrollerar omedelbart om namnet är tillgängligt. En lista över regler för namngivning av namnområden finns i Skapa namnområde REST API.
För Plats väljer du land eller region där namnrymden ska finnas.
För Prisnivå väljer du prisnivån (Basic, Standard eller Premium) för namnområdet. För den här snabbstarten väljer du Standard.
Om du vill använda ämnen och prenumerationer väljer du antingen Standard eller Premium. Ämnen/prenumerationer stöds inte på prisnivån Basic.
Om du har Premium på prisnivån anger du antalet meddelandeenheter. Premium-nivån ger resursisolering på processor- och minnesnivå så att varje arbetsbelastning körs självständigt. Den här resurscontainern kallas för en meddelandefunktionsenhet. Ett Premium-namnområde har minst en meddelandefunktionsenhet. Du kan välja 1, 2 eller 4 meddelandefunktionsenheter för varje Service Bus Premium-namnrymd. Mer information finns i Service Bus Premium-meddelanden.
Välj Granska + skapa. Systemet skapar namnområdet och aktiverar det. Du kan behöva vänta några minuter medan systemet tilldelar resurser till ditt konto.
På sidan Granska + skapa granskar du inställningarna och väljer Skapa.
Välj Gå till resurs på distributionssidan.
Startsidan för din Service Bus-namnrymd visas.
Hämta anslutningssträngen
När du skapar ett nytt namnområde genereras automatiskt en första princip för signatur för delad åtkomst (SAS) med primära och sekundära nycklar och primära och sekundära anslutningssträngar som var och en ger fullständig kontroll över alla aspekter av namnområdet. Se Service Bus – autentisering och auktorisering för mer information om hur du skapar regler med mer begränsade rättigheter för regelbundna sändare och mottagare.
Följ dessa steg om du vill kopiera den primära anslutningssträngen för namnområdet:
På Service Bus namnområde väljer du Principer för delad åtkomst på den vänstra menyn.
På sidan Principer för delad åtkomst väljer du RootManageSharedAccessKey.
I fönstret Princip: RootManageSharedAccessKey klickar du på knappen Kopiera bredvid Primär anslutningssträng för att kopiera anslutningssträngen till dina urklipp för senare användning. Klistra in det här värdet i Anteckningar eller på en tillfällig plats.
Du kan använda den här sidan för att kopiera primärnyckel, sekundär nyckel och sekundär anslutningssträng.
Skapa en kö i Azure-portalen
På sidan Service Bus Namespace (Service Bus-namnrymd) väljer du Köer på navigeringsmenyn till vänster.
På sidan Köer väljer du + Kö i verktygsfältet.
Ange ett namn för kön och låt de andra värdena ha kvar standardvärdena.
Välj nu Skapa.
Skicka meddelanden till kön
Det här avsnittet visar hur du skapar ett .NET Core-konsolprogram för att skicka meddelanden till en Service Bus kö.
Anteckning
Den här snabbstarten innehåller stegvisa instruktioner för att implementera ett enkelt scenario för att skicka en batch med meddelanden till en Service Bus-kö och sedan ta emot dem. Fler exempel på andra och avancerade scenarier finns i Service Bus .NET-exempel på GitHub.
Skapa ett konsolprogram
Starta Visual Studio 2019.
Välj Skapa ett nytt projekt.
I dialogrutan Skapa ett nytt projekt gör du följande: Om du inte ser den här dialogrutan väljer du Arkiv på menyn, väljer Nytt och väljer sedan Project.
Välj C# som programmeringsspråk.
Välj Konsol som typ av program.
Välj Konsolprogram i resultatlistan.
Välj Nästa.
Ange QueueSender som projektnamn, ServiceBusQueueQuickStart som lösningsnamn och välj sedan Nästa.
På sidan Ytterligare information väljer du Skapa för att skapa lösningen och projektet.
Lägga till Service Bus-NuGet-paketet
Välj Verktyg > NuGet Package Manager Package Manager > Console på menyn.
Kör följande kommando för att installera NuGet-paketet Azure.Messaging.ServiceBus:
Install-Package Azure.Messaging.ServiceBus
Lägga till kod för att skicka meddelanden till kön
I Program.cs lägger du till följande
using-instruktioner överst i definitionen för namnområdet före klassdeklarationen.using System.Threading.Tasks; using Azure.Messaging.ServiceBus;I klassen
Programdeklarerar du följande egenskaper, precis föreMainmetoden .Ersätt
<NAMESPACE CONNECTION STRING>med den primära anslutningssträngen till Service Bus namnområdet. Och ersätt<QUEUE NAME>med namnet på din kö.// 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;Ersätt koden i
Mainmetoden med följande kod. Mer information om koden finns i kodkommentarer. Här är de viktiga stegen i koden.Skapar ett ServiceBusClient-objekt med hjälp av den primära anslutningssträngen till namnområdet.
Anropar metoden CreateSender på ServiceBusClient-objektet för att skapa ett ServiceBusSender-objekt för den Service Bus kön.
Skapar ett ServiceBusMessageBatch-objekt med hjälp av metoden ServiceBusSender.CreateMessageBatchAsync.
Lägg till meddelanden i batchen med hjälp av ServiceBusMessageBatch.TryAddMessage.
Skickar batchen med meddelanden till Service Bus med hjälp av metoden 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(); }
Så här bör filen Program.cs se ut:
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(); } } }Ersätt
<NAMESPACE CONNECTION STRING>med den primära anslutningssträngen till Service Bus namnområdet. Och ersätt<QUEUE NAME>med namnet på din kö.Skapa projektet och se till att det inte finns några fel.
Kör programmet och vänta på bekräftelsemeddelandet.
A batch of 3 messages has been published to the queueI Azure Portal du följande steg:
Gå till Service Bus namnområdet.
På sidan Översikt väljer du kön i fönstret längst ned i mitten.
Observera värdena i avsnittet Essentials.
Lägg märke till följande värden:
- Värdet för Antal aktiva meddelanden för kön är nu 3. Varje gång du kör avsändarappen utan att hämta meddelanden ökar värdet med 3.
- Den aktuella storleken på kön ökar varje gång appen lägger till meddelanden i kön.
- I diagrammet Meddelanden i avsnittet Mått längst ned ser du att det finns tre inkommande meddelanden för kön.
Ta emot meddelanden från kön
I det här avsnittet skapar du ett .NET Core-konsolprogram som tar emot meddelanden från kön.
Anteckning
Den här snabbstarten innehåller stegvisa instruktioner för att implementera ett enkelt scenario för att skicka en batch med meddelanden till en Service Bus-kö och sedan ta emot dem. Fler exempel på andra och avancerade scenarier finns i Service Bus .NET-exempel på GitHub.
Skapa ett projekt för mottagaren
- I fönstret Solution Explorer högerklickar du på lösningen ServiceBusQueueQuickStart, pekar på Lägg till och väljer Ny Project.
- Välj Konsolprogram och välj Nästa.
- Ange QueueReceiver som Project och välj Skapa.
- I Solution Explorer högerklickar du på QueueReceiver och väljer Set as a Startup Project.
Lägga till Service Bus-NuGet-paketet
Välj Verktyg > NuGet Package Manager Package Manager > Console på menyn.
I fönstret Package Manager Console (Package Manager-konsol) bekräftar du att QueueReceiver har valts för standardprojektet. Annars använder du listrutan för att välja QueueReceiver.
Kör följande kommando för att installera NuGet-paketet Azure.Messaging.ServiceBus:
Install-Package Azure.Messaging.ServiceBus
Lägga till koden för att ta emot meddelanden från kön
I det här avsnittet lägger du till kod för att hämta meddelanden från kön.
I Program.cs lägger du till följande
using-instruktioner överst i definitionen för namnområdet före klassdeklarationen.using System.Threading.Tasks; using Azure.Messaging.ServiceBus;I klassen
Programdeklarerar du följande egenskaper, precis föreMainmetoden .Ersätt
<NAMESPACE CONNECTION STRING>med den primära anslutningssträngen till Service Bus namnområdet. Och ersätt<QUEUE NAME>med namnet på din kö.// 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;Lägg till följande metoder i klassen
Programför att hantera mottagna meddelanden och eventuella fel.// 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; }Ersätt koden i
Mainmetoden med följande kod. Mer information om koden finns i kodkommentarer. Här är de viktiga stegen i koden.Skapar ett ServiceBusClient-objekt med hjälp av den primära anslutningssträngen till namnområdet.
Anropar createProcessor-metoden på ServiceBusClient-objektet för att skapa ett ServiceBusProcessor-objekt för den Service Bus kön.
Anger hanterare för ProcessMessageAsync- och ProcessErrorAsync-händelser för ServiceBusProcessor-objektet.
Börjar bearbeta meddelanden genom att använda StartProcessingAsync på ServiceBusProcessor-objektet.
När användaren trycker på en nyckel för att avsluta bearbetningen anropar StopProcessingAsync på ServiceBusProcessor-objektet.
Mer information finns i kodkommentarer.
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(); } }
Så här bör du
Program.csse ut: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(); } } } }Ersätt
<NAMESPACE CONNECTION STRING>med den primära anslutningssträngen till Service Bus namnområdet. Och ersätt<QUEUE NAME>med namnet på din kö.Skapa projektet och se till att det inte finns några fel.
Kör mottagarprogrammet. Du bör se de mottagna meddelandena. Tryck på valfri tangent för att stoppa mottagaren och programmet.
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 messagesKontrollera portalen igen. Vänta några minuter och uppdatera sidan om du inte ser
0aktiva meddelanden.
Nästa steg
Se följande dokumentation och exempel: