Kullanmaya başlayın kuyrukları Service Bus (.NET)

Bu hızlı başlangıçta aşağıdaki adımları gerçekleştirebilirsiniz:

  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ıç, bir iş kuyruğuna toplu ileti gönderme ve ardından bunları alma ile ilgili basit bir senaryoyu Service Bus adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. Service Bus .NET örnekleri GitHub.

Önkoşullar

Hizmette yeniysiniz, bu hızlı Service Bus önce genel bakış'a bakın.

  • 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'da tanıtıldı yeni özellikleri kullanır. Kitaplığı önceki C# dil sürümleriyle kullanmaya devam edin, ancak yeni söz dizimi kullanılamaz. Tam söz diziminin kullanılması için, 3.0 veya .NET Core SDK ve dil sürümü olarak ayarlanmış şekilde derlemenizi latest öneririz. Visual Studio kullanıyorsanız, Visual Studio 2019'dan önceki 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ızda bulunan Service Bus kaynaklarını adreslemek için içeriğin kapsamını belirleyen bir kapsayıcı sunar.

Ad alanı oluşturmak için:

  1. Azure portalda oturum açma

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

    bir kaynak oluştur, tümleştirme ve sonra menüdeki Service Bus seçimi gösteren resim.

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

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

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

    3. Ad alanı için bir ad girin. Adın kullanılabilirliği sistem tarafından hemen kontrol edilir. Ad alanlarını adlandırma kurallarının bir listesi için bkz. Create Namespace REST API.

    4. Konum için, ad alanınızı barındırılacak 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.

      Konuları ve aboneliklerikullanmak Istiyorsanız, standart veya Premium birini seçin. Konular/abonelikler temel fiyatlandırma katmanında 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ımda ç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 bir Service Bus Premium ad alanı için 1, 2 veya 4 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.

      Ad alanı oluştur sayfasını gösteren resim

    7. Gözden geçir + 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.

    Kaynak git bağlantısına sahip dağıtım başarılı sayfasını gösteren resim.

  5. Service Bus ad alanınız için ana sayfayı görürsünüz.

    oluşturulan Service Bus ad alanının ana sayfasını gösteren resim.

Bağlantı dizesini alma

Yeni bir ad alanı oluşturmak, birincil ve ikincil anahtarlarla otomatik olarak bir ilk paylaşılan erişim Imzası (SAS) ilkesi oluşturur ve her birinin ad alanının tüm yönleri üzerinde tam denetim izni veren birincil ve ikincil bağlantı dizelerine sahiptir. düzenli gönderenler ve alıcılar için daha kısıtlanmış haklara sahip kurallar oluşturma hakkında bilgi için bkz. Service Bus kimlik doğrulaması ve yetkilendirme .

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

  1. Service Bus ad alanı sayfasında sol menüdeki paylaşılan erişim ilkeleri ' ni seçin.

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

    Ekran görüntüsü, ilke vurgulanmış şekilde paylaşılan erişim ilkeleri penceresini gösterir.

  3. İlke: RootManageSharedAccessKey penceresinde, birincil bağlantı dizesi' nin yanındaki Kopyala düğmesine tıklayın ve 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.

    Ekran görüntüsünde, anahtarlar ve bağlantı dizeleri içeren RootManageSharedAccessKey adlı bir s İlkesi gösterilir.

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

Kuyruk oluşturma Azure portal

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

  2. Kuyruklar sayfasında, araç çubuğunda + Kuyruk'a tıklayın.

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

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

    Portalda kuyruk oluşturulmasını gösteren resim

Kuyruğa ileti gönderme

Bu bölümde, bir ağ kuyruğuna ileti göndermek için bir .NET Core konsol Service Bus gösterir.

Not

Bu hızlı başlangıç, bir iş kuyruğuna toplu ileti gönderme ve ardından bunları alma ile ilgili basit bir senaryoyu Service Bus adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. Service Bus .NET örnekleri GitHub.

Konsol uygulaması oluşturma

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

  2. Yeni proje oluştur'a 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üde Dosya'ya tıklayın, Yeni 'yi seçin ve sonra da Yeni'yi Project.

    1. Programlama dili olarak C# öğesini seçin.

    2. Uygulamanın türü olarak Konsol'ı seçin.

    3. Sonuç listesinden Konsol Uygulaması'nu seçin.

    4. Ardından, Sonraki'yi seçin.

      C# ve Konsol'ın seçili olduğu Yeni proje oluştur iletişim kutusunu gösteren resim

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

    Yeni projenizi yapılandır iletişim kutusunda çözüm ve proje adlarını gösteren resim

  5. Ek bilgiler sayfasında, çözümü ve projeyi oluşturmak için Oluştur'a tıklayın.

Service Bus NuGet paketi ekleme

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

  2. Aşağıdaki komutu çalıştırarak Azure.Messaging.ServiceBus NuGet yükleyin:

    Install-Package Azure.Messaging.ServiceBus
    

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

  1. Program.cs içinde, ad alanı tanımının en üstüne, sınıf using bildiriminden önce aşağıdaki deyimlerini ekleyin.

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

    yerine <NAMESPACE CONNECTION STRING> ad alanınıza birincil bağlantı Service Bus değiştirin. ve yerine <QUEUE NAME> kuyruğun adını yazın.

    
    // 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önteminde yer alan Main kodu aşağıdaki kodla değiştirin. Kodla ilgili ayrıntılar için kod açıklamalarını görme. Koddan önemli adımlar aşağıdaki gibidir.

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

    2. Belirli bir kuyruk için servicebusSender nesnesi oluşturmak için ServiceBusClient nesnede CreateSender Service Bus ç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 ileti toplu Service Bus toplu iş 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 şu şekilde olması gerekir:

    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. yerine <NAMESPACE CONNECTION STRING> ad alanınıza birincil bağlantı Service Bus değiştirin. ve yerine <QUEUE NAME> kuyruğun adını yazın.

  6. Projeyi derleme ve hata yok olduğundan emin olun.

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

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

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

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

      Kuyruk seçili Service Bus Ad Alanı sayfasını Azure portal görüntüsü.

    3. Temel Değerler bölümündeki değerlere dikkat edin.

    Alınan ileti sayısını ve kuyruğun boyutunu gösteren resim

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

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

Kuyruktan ileti alma

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

Not

Bu hızlı başlangıç, bir iş kuyruğuna toplu ileti gönderme ve ardından bunları alma ile ilgili basit bir senaryoyu Service Bus adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. Service Bus .NET örnekleri GitHub.

Alıcı için proje oluşturma

  1. Yeni Çözüm Gezgini ServiceBusQueueQuickStart çözümüne sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Giriş'i Project.
  2. Konsol uygulaması'ı ve ardından Sonraki'yi seçin.
  3. Project için QueueReceiver girin ve Oluştur'a seçin.
  4. Yeni Çözüm Gezgini QueueReceiver'a sağ tıklayın ve Başlangıç olarak ayarla'yı Project.

Service Bus NuGet paketi ekleme

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

  2. Yeni Paket Yöneticisi penceresinde Varsayılan proje için QueueReceiver'ın seçili olduğunu onaylayın. Yoksa, QueueReceiver'ı seçmek için açılan listeyi kullanın.

    Paket Yöneticisi Konsolunda QueueReceiver projesinin seçili olduğunu gösteren ekran görüntüsü

  3. Aşağıdaki komutu çalıştırarak Azure.Messaging.ServiceBus NuGet yükleyin:

    Install-Package Azure.Messaging.ServiceBus
    

Kuyruktan iletileri almak için kodu ekleme

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

  1. Program.cs içinde, ad alanı tanımının en üstüne, sınıf using bildiriminden önce aşağıdaki deyimlerini ekleyin.

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

    yerine <NAMESPACE CONNECTION STRING> ad alanınıza birincil bağlantı Service Bus değiştirin. ve yerine <QUEUE NAME> kuyruğun adını yazın.

    // 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 Program için sınıfına 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. 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. yönteminde yer alan Main kodu aşağıdaki kodla değiştirin. Kodla ilgili ayrıntılar için kod açıklamalarını görme. Koddan önemli adımlar aşağıdaki gibidir.

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

    2. ServiceBusClient nesne üzerinde CreateProcessor yöntemini çağırarak belirtilen kuyruk için bir ServiceBusProcessor Service Bus oluşturur.

    3. Servicebusprocessor nesnesinin processmessageasync ve processerrorasync olayları için işleyicileri belirtir.

    4. Servicebusprocessor nesnesinde startprocessingasync öğesini çağırarak iletileri işlemeye başlar.

    5. Kullanıcı işlemeyi bitirmek için bir tuşa bastığında Servicebusprocessor nesnesinde stopprocessingasync öğesini ç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. Şöyle Program.cs görünmelidir:

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

  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 kontrol edin. Birkaç dakika bekleyin ve 0 etkin iletiler görmüyorsanız sayfayı yenileyin.

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

    • Alt ölçümler bölümündeki iletiler grafiğinde, sıraya yönelik üç gelen ileti ve üç giden ileti olduğunu görebilirsiniz.

      Etkin iletiler ve alındıktan sonra Boyutlandır

Sonraki adımlar

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