Azure Service Bus kuyruklarını kullanmaya başlama (.NET)

Bu hızlı başlangıçta aşağıdaki adımları uygulayacaksınız:

  1. Azure portalı ile Service Bus ad alanı oluşturma.
  2. Azure portalını kullanarak Service Bus kuyruğu oluşturma.
  3. Sıraya bir dizi ileti göndermek için bir .NET Core konsol uygulaması yazın.
  4. Bu iletileri kuyruktan almak için bir .NET Core konsol uygulaması yazın.

Not

Bu hızlı başlangıç, Service Bus kuyruğuna toplu ileti göndermeye ve sonra bunları almaya yönelik basit bir senaryo uygulamaya yönelik adım adım yönergeler sağlar. .NET istemci kitaplığına genel bakış için bkz. .NET için Azure Service Bus istemci kitaplığı. Daha fazla örnek için bkz. GitHub'da Service Bus .NET örnekleri.

Önkoşullar

Hizmette yeniyseniz, bu hızlı başlangıcı yapmadan önce bkz. Service Bus'a genel bakış .

  • Azure aboneliği. Azure Service Bus dahil olmak üzere Azure hizmetlerini kullanmak için bir aboneliğe ihtiyacınız vardır. Mevcut bir Azure hesabınız yoksa ücretsiz deneme sürümüne kaydolabilirsiniz.
  • Microsoft Visual Studio 2019. Azure Service Bus istemci kitaplığı, C# 8.0 sürümünde sunulan yeni özellikleri kullanır. Kitaplığı önceki C# dil sürümleriyle kullanmaya devam edebilirsiniz, ancak yeni söz dizimi kullanılamaz. Tam söz dizimini kullanmak için .NET Core SDK 3.0 veya üzeri ile derlemenizi ve dil sürümünü olarak ayarlamanızı latestöneririz. Visual Studio kullanıyorsanız, Visual Studio 2019 öncesi sürümler C# 8.0 projeleri oluşturmak için gereken araçlarla uyumlu değildir.

Azure portalında bir ad alanı oluşturma

Azure'da Service Bus mesajlaşma varlıklarını kullanmaya başlamak için öncelikle Azure'da benzersiz olan bir ad alanı oluşturmanız gerekir. Ad alanı, uygulamanızdaki Service Bus kaynakları için bir kapsam kapsayıcısı sağlar.

Ad alanı oluşturmak için:

  1. Azure portalda oturum açma

  2. Portalın sol gezinti bölmesinde + Kaynak oluştur'u, Tümleştirme'yi ve ardından Service Bus'ı seçin.

    Image showing selection of Create a resource, Integration, and then Service Bus in the menu.

  3. Ad alanı oluştur sayfasının Temel bilgiler etiketinde şu adımları izleyin:

    1. Abonelik için ad alanının oluşturulacağı bir Azure aboneliği seçin.

    2. Kaynak grubu için, ad alanının içinde yer aldığı mevcut bir kaynak grubunu seçin veya yeni bir tane oluşturun.

    3. Ad alanı için bir ad girin. Ad alanı adı aşağıdaki adlandırma kurallarına uymalıdır:

      • Adın Azure genelinde benzersiz olması gerekir. Adın kullanılabilirliği sistem tarafından hemen kontrol edilir.
      • Ad uzunluğu en az 6 ve en çok 50 karakterdir.
      • Ad yalnızca harf, sayı, kısa çizgi (-) içerebilir.
      • Ad bir harfle başlamalı ve bir harf veya sayı ile bitmelidir.
      • Ad "-sb" veya "-mgmt" ile bitmiyor.
    4. Konum için ad alanınızın barındırılması gereken bölgeyi seçin.

    5. Fiyatlandırma katmanı için ad alanı için fiyatlandırma katmanını (Temel, Standart veya Premium) seçin. Bu hızlı başlangıç için Standart'ı seçin.

      Önemli

      Konuları ve abonelikleri kullanmak istiyorsanız Standart veya Premium'u seçin. Temel fiyatlandırma katmanında konular/abonelikler desteklenmez.

      Premium fiyatlandırma katmanını seçtiyseniz, mesajlaşma birimi sayısını belirtin. Premium katman, her iş yükünün yalıtılmış olarak çalışması için CPU ve bellek düzeyinde kaynak yalıtımı sağlar. Bu kaynak kapsayıcısı mesajlaşma birimi olarak adlandırılır. Premium ad alanında en az bir mesajlaşma birimi vardır. Her Service Bus Premium ad alanı için 1, 2, 4, 8 veya 16 mesajlaşma birimi seçebilirsiniz. Daha fazla bilgi için bkz. Service Bus Premium Mesajlaşma.

    6. Gözden geçir ve oluştur’u seçin. Artık sistem ad alanınızı oluşturur ve kullanıma açar. Sistem, hesabınıza yönelik kaynakları sağlarken birkaç dakika beklemeniz gerekebilir.

      Image showing the Create a namespace page

    7. Oluştur sayfasında ayarları gözden geçirin ve Oluştur'u seçin.

  4. Dağıtım sayfasında Kaynağa git'i seçin.

    Image showing the deployment succeeded page with the Go to resource link.

  5. Service Bus ad alanınızın giriş sayfasını görürsünüz.

    Image showing the home page of the Service Bus namespace created.

Bağlantı dizesini alma

Yeni bir ad alanı oluşturmak, birincil ve ikincil anahtarlarla ve her biri ad alanının tüm yönleri üzerinde tam denetim sağlayan birincil ve ikincil bağlantı dizeleriyle otomatik olarak bir ilk Paylaşılan Erişim İmzası (SAS) ilkesi oluşturur. Normal gönderenler ve alıcılar için daha kısıtlı haklara sahip kurallar oluşturma hakkında bilgi için bkz. Service Bus kimlik doğrulaması ve yetkilendirmesi .

Ad alanınızın birincil bağlantı dizesini kopyalamak için şu adımları izleyin:

  1. Service Bus Ad Alanı sayfasında soldaki menüde Paylaşılan erişim ilkeleri'ni seçin.

  2. Paylaşılan erişim ilkeleri sayfasında RootManageSharedAccessKey'i seçin.

  3. İlke: RootManageSharedAccessKey penceresinde Birincil Bağlantı Dizesi'nin yanındaki kopyala düğmesini seçerek bağlantı dizesini daha sonra kullanmak üzere panonuza kopyalayın. Bu değeri Not Defteri veya başka bir geçici konuma yapıştırın.

    Screenshot shows an S A S policy called RootManageSharedAccessKey, which includes keys and connection strings.

    Birincil anahtarı, ikincil anahtarı, birincil bağlantı dizesini ve ikincil bağlantı dizesini kopyalamak için bu sayfayı kullanabilirsiniz.

Azure portalında kuyruk oluşturma

  1. Service Bus Ad Alanı sayfasında, sol gezinti menüsünde Kuyruklar'ı seçin.

  2. Kuyruklar sayfasında araç çubuğunda + Kuyruk'u seçin.

  3. Kuyruk için bir ad girin ve diğer değerleri varsayılan değerleriyle bırakın.

  4. Şimdi Oluştur'u seçin.

    Image showing creation of a queue in the portal

Kuyruğa ileti gönderme

Bu bölümde, Service Bus kuyruğuna ileti göndermek için bir .NET Core konsol uygulamasının nasıl oluşturulacağı gösterilmektedir.

Not

Bu hızlı başlangıç, Service Bus kuyruğuna toplu ileti göndermeye ve sonra bunları almaya yönelik basit bir senaryo uygulamaya yönelik adım adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. GitHub'da Service Bus .NET örnekleri.

Konsol uygulaması oluşturma

  1. Visual Studio 2019’u başlatın.

  2. Yeni proje oluştur'u seçin.

  3. Yeni proje oluştur iletişim kutusunda aşağıdaki adımları uygulayın: Bu iletişim kutusunu görmüyorsanız, menüden Dosya'yı seçin, Yeni'yi ve ardından Proje'yi seçin.

    1. Programlama dili için C# seçeneğini belirleyin.

    2. Uygulamanın türü için Konsol'a tıklayın.

    3. Sonuçlar listesinden Konsol Uygulaması'nı seçin.

    4. Ardından İleri'yi seçin.

      Image showing the Create a new project dialog box with C# and Console selected

  4. Proje adı olarak QueueSender , çözüm adı olarak ServiceBusQueueQuickStart girin ve İleri'yi seçin.

    Image showing the solution and project names in the Configure your new project dialog box

  5. Ek bilgiler sayfasında Oluştur'u seçerek çözümü ve projeyi oluşturun.

Service Bus NuGet paketi ekleme

  1. Menüden Araçlar>NuGet Paket YöneticisiPaket Yöneticisi> Konsolu'nu seçin.

  2. Azure.Messaging.ServiceBus NuGet paketini yüklemek için aşağıdaki komutu çalıştırın:

    Install-Package Azure.Messaging.ServiceBus
    

Kuyruğa ileti göndermek için kod ekleme

  1. Program.cs dosyasında, sınıf bildiriminden önce ad alanı tanımının en üstüne aşağıdaki using deyimleri ekleyin.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    
  2. sınıfı içinde Program , yönteminden hemen önce Main aşağıdaki özellikleri bildirin.

    değerini Service Bus ad alanınızın birincil bağlantı dizesiyle değiştirin <NAMESPACE CONNECTION STRING> . öğesini de kuyruğunuzun adıyla değiştirin <QUEUE NAME> .

    
    // 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. yöntemindeki Main kodu aşağıdaki kodla değiştirin. Kod hakkındaki ayrıntılar için bkz. kod açıklamaları. Koddaki önemli adımlar aşağıdadır.

    1. Ad alanına birincil bağlantı dizesini kullanarak bir ServiceBusClient nesnesi oluşturur.

    2. Belirli Service Bus kuyruğu için bir ServiceBusSender nesnesi oluşturmak üzere ServiceBusClient nesnesinde CreateSender yöntemini çağırır.

    3. ServiceBusSender.CreateMessageBatchAsync yöntemini kullanarak bir ServiceBusMessageBatch nesnesi oluşturur.

    4. ServiceBusMessageBatch.TryAddMessage kullanarak toplu işleme ileti ekleyin.

    5. ServiceBusSender.SendMessagesAsync yöntemini kullanarak toplu iletileri Service Bus kuyruğuna gönderir.

      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. Program.cs dosyanız şöyle görünmelidir:

    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. değerini Service Bus ad alanınızın birincil bağlantı dizesiyle değiştirin <NAMESPACE CONNECTION STRING> . öğesini de kuyruğunuzun adıyla değiştirin <QUEUE NAME> .

  6. Projeyi derleyin ve hata olmadığından emin olun.

  7. Programı çalıştırın ve onay iletisini bekleyin.

    A batch of 3 messages has been published to the queue
    
  8. Azure portalında şu adımları izleyin:

    1. Service Bus ad alanınıza gidin.

    2. Genel Bakış sayfasında, orta alt bölmedeki kuyruğu seçin.

      Image showing the Service Bus Namespace page in the Azure portal with the queue selected.

    3. Temel Bileşenler bölümündeki değerlere dikkat edin.

    Image showing the number of messages received and the size of the queue

    Aşağıdaki değerlere dikkat edin:

    • Kuyruğun Etkin ileti sayısı değeri artık 3'tür. İletileri almadan bu gönderen uygulamasını her çalıştırdığınızda, bu değer 3 artar.
    • Uygulamanın kuyruğa ileti ekleyişinde kuyruğun geçerli boyutu artar.
    • En alttaki Ölçümler bölümündeki İletiler grafiğinde, kuyruk için üç gelen ileti olduğunu görebilirsiniz.

Kuyruktan ileti alma

Bu bölümde kuyruktan ileti alan bir .NET Core konsol uygulaması oluşturacaksınız.

Not

Bu hızlı başlangıç, Service Bus kuyruğuna toplu ileti göndermeye ve sonra bunları almaya yönelik basit bir senaryo uygulamaya yönelik adım adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. GitHub'da Service Bus .NET örnekleri.

Alıcı için proje oluşturma

  1. Çözüm Gezgini penceresinde ServiceBusQueueQuickStart çözümüne sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Proje'yi seçin.
  2. Konsol uygulaması'nın ardından İleri'yi seçin.
  3. Proje adı olarak QueueReceiver girin ve Oluştur'u seçin.
  4. Çözüm Gezgini penceresinde QueueReceiver'a sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.

Service Bus NuGet paketi ekleme

  1. Menüden Araçlar>NuGet Paket YöneticisiPaket Yöneticisi> Konsolu'nu seçin.

  2. Paket Yöneticisi Konsolu penceresinde, Varsayılan proje için QueueReceiver seçeneğinin belirlendiğini onaylayın. Aksi takdirde, QueueReceiver'ı seçmek için açılan listeyi kullanın.

    Screenshot showing QueueReceiver project selected in the Package Manager Console

  3. Azure.Messaging.ServiceBus NuGet paketini yüklemek için aşağıdaki komutu çalıştırın:

    Install-Package Azure.Messaging.ServiceBus
    

Kuyruktan ileti almak için kodu ekleme

Bu bölümde, kuyruktan iletileri almak için kod ekleyeceksiniz.

  1. Program.cs dosyasında, sınıf bildiriminden önce ad alanı tanımının en üstüne aşağıdaki using deyimleri ekleyin.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    
  2. sınıfı içinde Program , yönteminden hemen önce Main aşağıdaki özellikleri bildirin.

    değerini Service Bus ad alanınızın birincil bağlantı dizesiyle değiştirin <NAMESPACE CONNECTION STRING> . öğesini de kuyruğunuzun adıyla değiştirin <QUEUE NAME> .

    // 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. Alınan iletileri ve hataları işlemek için sınıfına Program aşağıdaki yöntemleri ekleyin.

    // handle received messages
    static async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. message 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. yöntemindeki Main kodu aşağıdaki kodla değiştirin. Kod hakkındaki ayrıntılar için bkz. kod açıklamaları. Koddaki önemli adımlar aşağıdadır.

    1. Ad alanına birincil bağlantı dizesini kullanarak bir ServiceBusClient nesnesi oluşturur.

    2. Belirtilen Service Bus kuyruğu için bir ServiceBusProcessor nesnesi oluşturmak üzere ServiceBusClient nesnesinde CreateProcessor yöntemini çağırır.

    3. ServiceBusProcessor nesnesinin ProcessMessageAsync ve ProcessErrorAsync olayları için işleyicileri belirtir.

    4. ServiceBusProcessor nesnesinde StartProcessingAsync'i çağırarak iletileri işlemeye başlar.

    5. Kullanıcı işlemi sonlandırmak için bir tuşa bastığında, ServiceBusProcessor nesnesinde StopProcessingAsync'i çağırır.

      Daha fazla bilgi için bkz. kod açıklamaları.

              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. Aşağıdaki Program.cs gibi görünmelisiniz:

    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. değerini Service Bus ad alanınızın birincil bağlantı dizesiyle değiştirin <NAMESPACE CONNECTION STRING> . öğesini de kuyruğunuzun adıyla değiştirin <QUEUE NAME> .

  7. Projeyi derleyin ve hata olmadığından emin olun.

  8. Alıcı uygulamasını çalıştırın. Alınan iletileri görmeniz gerekir. Alıcıyı ve uygulamayı durdurmak için herhangi bir tuşa basın.

    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. Portalı yeniden denetleyin. Birkaç dakika bekleyin ve Etkin iletileri görmüyorsanız 0 sayfayı yenileyin.

    • Etkin ileti sayısı ve Geçerli boyut değerleri artık 0'dır.

    • En alttaki Ölçümler bölümündeki İletiler grafiğinde, kuyruk için üç gelen ileti ve üç giden ileti olduğunu görebilirsiniz.

      Active messages and size after receive

Sonraki adımlar

Aşağıdaki belgelere ve örneklere bakın: