Kom igång med Azure Service Bus-köer (.NET)

I den här snabbstarten gör du följande:

  1. Skapa ett Service Bus-namnområde med Azure Portal.
  2. Skapa en Service Bus-kö med Azure Portal.
  3. Skriva ett .NET Core-konsolprogram för att skicka en uppsättning meddelanden till kön.
  4. 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:

  1. Logga in på Azure-portalen

  2. I det vänstra navigeringsfältet i portalen väljer du + Skapa en resurs följt av Integration och sedan Service Bus.

    Bild som visar val av Skapa en resurs, Integration Service Bus sedan på menyn.

  3. I taggen Grundläggande på sidan Skapa namnområde följer du dessa steg:

    1. För Prenumeration väljer du en Azure-prenumeration där du ska skapa namnrymden.

    2. För Resursgrupp väljer du en befintlig resursgrupp där namnrymden ska finnas, eller så skapar du en ny.

    3. 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.

    4. För Plats väljer du land eller region där namnrymden ska finnas.

    5. 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.

    6. 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.

      Bild som visar sidan Skapa ett namnområde

    7. På sidan Granska + skapa granskar du inställningarna och väljer Skapa.

  4. Välj Gå till resurs på distributionssidan.

    Bild som visar sidan distributionen lyckades med länken Gå till resurs.

  5. Startsidan för din Service Bus-namnrymd visas.

    Bild som visar startsidan för det Service Bus namnområdet som skapats.

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:

  1. På Service Bus namnområde väljer du Principer för delad åtkomst på den vänstra menyn.

  2. På sidan Principer för delad åtkomst väljer du RootManageSharedAccessKey.

    Skärmbild som visar fönstret Principer för delad åtkomst med en princip markerad.

  3. 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.

    Skärmbild som visar en S A S-princip med namnet RootManageSharedAccessKey, som innehåller nycklar och anslutningssträngar.

    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

  1. På sidan Service Bus Namespace (Service Bus-namnrymd) väljer du Köer på navigeringsmenyn till vänster.

  2. På sidan Köer väljer du + Kö i verktygsfältet.

  3. Ange ett namn för kön och låt de andra värdena ha kvar standardvärdena.

  4. Välj nu Skapa.

    Bild som visar hur du skapar en kö i portalen

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

  1. Starta Visual Studio 2019.

  2. Välj Skapa ett nytt projekt.

  3. 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.

    1. Välj C# som programmeringsspråk.

    2. Välj Konsol som typ av program.

    3. Välj Konsolprogram i resultatlistan.

    4. Välj Nästa.

      Bild som visar dialogrutan Skapa ett nytt projekt med C# och Konsol valt

  4. Ange QueueSender som projektnamn, ServiceBusQueueQuickStart som lösningsnamn och välj sedan Nästa.

    Bild som visar lösningen och projektnamnen i dialogrutan Konfigurera det nya projektet

  5. På sidan Ytterligare information väljer du Skapa för att skapa lösningen och projektet.

Lägga till Service Bus-NuGet-paketet

  1. Välj Verktyg > NuGet Package Manager Package Manager > Console på menyn.

  2. 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

  1. 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;
    
  2. I klassen Program deklarerar du följande egenskaper, precis före Main metoden .

    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;
    
    
  3. Ersätt koden i Main metoden med följande kod. Mer information om koden finns i kodkommentarer. Här är de viktiga stegen i koden.

    1. Skapar ett ServiceBusClient-objekt med hjälp av den primära anslutningssträngen till namnområdet.

    2. Anropar metoden CreateSenderServiceBusClient-objektet för att skapa ett ServiceBusSender-objekt för den Service Bus kön.

    3. Skapar ett ServiceBusMessageBatch-objekt med hjälp av metoden ServiceBusSender.CreateMessageBatchAsync.

    4. Lägg till meddelanden i batchen med hjälp av ServiceBusMessageBatch.TryAddMessage.

    5. 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();
      }    
      
  4. 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();
            }
        }
    }   
    
  5. 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ö.

  6. Skapa projektet och se till att det inte finns några fel.

  7. Kör programmet och vänta på bekräftelsemeddelandet.

    A batch of 3 messages has been published to the queue
    
  8. I Azure Portal du följande steg:

    1. Gå till Service Bus namnområdet.

    2. På sidan Översikt väljer du kön i fönstret längst ned i mitten.

      Bild som visar Service Bus namnområde i Azure Portal med kön vald.

    3. Observera värdena i avsnittet Essentials.

    Bild som visar antalet mottagna meddelanden och storleken på kön

    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

  1. I fönstret Solution Explorer högerklickar du på lösningen ServiceBusQueueQuickStart, pekar på Lägg till och väljer Ny Project.
  2. Välj Konsolprogram och välj Nästa.
  3. Ange QueueReceiver som Project och välj Skapa.
  4. I Solution Explorer högerklickar du på QueueReceiver och väljer Set as a Startup Project.

Lägga till Service Bus-NuGet-paketet

  1. Välj Verktyg > NuGet Package Manager Package Manager > Console på menyn.

  2. 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.

    Skärmbild som visar QueueReceiver-projektet som valts i Package Manager-konsolen

  3. 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.

  1. 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;
    
  2. I klassen Program deklarerar du följande egenskaper, precis före Main metoden .

    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;
    
  3. Lägg till följande metoder i klassen Program fö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;
    }
    
  4. Ersätt koden i Main metoden med följande kod. Mer information om koden finns i kodkommentarer. Här är de viktiga stegen i koden.

    1. Skapar ett ServiceBusClient-objekt med hjälp av den primära anslutningssträngen till namnområdet.

    2. Anropar createProcessor-metodenServiceBusClient-objektet för att skapa ett ServiceBusProcessor-objekt för den Service Bus kön.

    3. Anger hanterare för ProcessMessageAsync- och ProcessErrorAsync-händelser för ServiceBusProcessor-objektet.

    4. Börjar bearbeta meddelanden genom att använda StartProcessingAsync på ServiceBusProcessor-objektet.

    5. När användaren trycker på en nyckel för att avsluta bearbetningen anropar StopProcessingAsyncServiceBusProcessor-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();
                  }
              }
      
  5. Så här bör du Program.cs se 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();
                }
            }
        }
    }
    
  6. 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ö.

  7. Skapa projektet och se till att det inte finns några fel.

  8. 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 messages
    
  9. Kontrollera portalen igen. Vänta några minuter och uppdatera sidan om du inte ser 0 aktiva meddelanden.

    • Värdena för Antal aktiva meddelanden och Aktuell storlek är nu 0.

    • I diagrammet Meddelanden i avsnittet Mått längst ned ser du att det finns tre inkommande meddelanden och tre utgående meddelanden för kön.

      Aktiva meddelanden och storlek efter mottagning

Nästa steg

Se följande dokumentation och exempel: