Azure Service Bus kuyruklarından ileti gönderme ve iletileri alma (.NET)Send messages to and receive messages from Azure Service Bus queues (.NET)

Bu öğreticide, Azure. Messaging. ServiceBus paketini kullanarak bir Service Bus kuyruğuna ileti göndermek ve ileti almak için bir .NET Core konsol uygulaması oluşturacaksınız.In this tutorial, you create a .NET Core console application to send messages to and receive messages from a Service Bus queue using the Azure.Messaging.ServiceBus package.

Önemli

Bu hızlı başlangıç, yeni Azure. Messaging. ServiceBus paketini kullanır.This quickstart uses the new Azure.Messaging.ServiceBus package. Eski Microsoft. Azure. ServiceBus paketini kullanan bir hızlı başlangıç için bkz. Microsoft. Azure. ServiceBus paketini kullanarak olay gönderme ve alma.For a quickstart that uses the old Microsoft.Azure.ServiceBus package, see Send and receive events using Microsoft.Azure.ServiceBus package.

ÖnkoşullarPrerequisites

Kuyruğa ileti göndermeSend messages to a queue

Bu hızlı başlangıç bölümünde, kuyruğa ileti göndermek için bir C# .NET Core konsol uygulaması oluşturacaksınız.In this quick start, you'll create a C# .NET Core console application to send messages to the queue.

Konsol uygulaması oluşturmaCreate a console application

Visual Studio 'Yu başlatın ve C# için yeni bir konsol uygulaması (.NET Core) projesi oluşturun.Launch Visual Studio and create a new Console App (.NET Core) project for C#.

Service Bus NuGet paketi eklemeAdd the Service Bus NuGet package

  1. Yeni oluşturulan projeye sağ tıklayın ve NuGet Paketlerini Yönet’i seçin.Right-click the newly created project and select Manage NuGet Packages.
  2. Gözat'ı seçin.Select Browse. Azure. Messaging. ServiceBus araması yapın ve seçin.Search for and select Azure.Messaging.ServiceBus.
  3. Yüklemeyi gerçekleştirmek için yükleme ' yi seçin ve ardından NuGet Paket Yöneticisi ' ni kapatın.Select Install to complete the installation, then close the NuGet Package Manager.

Kuyruğa ileti göndermek için kod eklemeAdd code to send messages to the queue

  1. Program. cs' de, using Sınıf bildiriminden önce, ad alanı tanımının en üstüne aşağıdaki deyimleri ekleyin:In Program.cs, add the following using statements at the top of the namespace definition, before the class declaration:

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    using Azure.Messaging.ServiceBus;
    
  2. ProgramSınıfında, aşağıdaki değişkenleri bildirin:In the Program class, declare the following variables:

        static string connectionString = "<NAMESPACE CONNECTION STRING>";
        static string queueName = "<QUEUE NAME>";
    

    Ad alanı için Bağlantı dizenizi değişken olarak girin connectionString .Enter your connection string for the namespace as the connectionString variable. Sıra adınızı girin.Enter your queue name.

  3. Doğrudan yönteminden sonra Main() , SendMessagesAsync() ileti gönderme işini yapan aşağıdaki yöntemi ekleyin:Directly after the Main() method, add the following SendMessagesAsync() method that does the work of sending a message:

        static async Task SendMessageAsync()
        {
            // create a Service Bus client 
            await using (ServiceBusClient client = new ServiceBusClient(connectionString))
            {
                // create a sender for the queue 
                ServiceBusSender sender = client.CreateSender(queueName);
    
                // create a message that we can send
                ServiceBusMessage message = new ServiceBusMessage("Hello world!");
    
                // send the message
                await sender.SendMessageAsync(message);
                Console.WriteLine($"Sent a single message to the queue: {queueName}");
            }
        }
    
  4. CreateMessagesSınıfına bir sıra (.NET kuyruğu) oluşturmak için adlı bir yöntem ekleyin Program .Add a method named CreateMessages to create a queue (.NET queue) of messages to the Program class. Genellikle, bu iletileri uygulamanızın farklı bölümlerinden alırsınız.Typically, you get these messages from different parts of your application. Burada, örnek iletiler için bir kuyruk oluşturacağız.Here, we create a queue of sample messages.

        static Queue<ServiceBusMessage> CreateMessages()
        {
            // create a queue containing the messages and return it to the caller
            Queue<ServiceBusMessage> messages = new Queue<ServiceBusMessage>();
            messages.Enqueue(new ServiceBusMessage("First message in the batch"));
            messages.Enqueue(new ServiceBusMessage("Second message in the batch"));
            messages.Enqueue(new ServiceBusMessage("Third message in the batch"));
            return messages;
        }
    
  5. Sınıfına adlı bir yöntem ekleyin SendMessageBatchAsync Program ve aşağıdaki kodu ekleyin.Add a method named SendMessageBatchAsync to the Program class, and add the following code. Bu yöntem bir ileti kuyruğu alır ve bir veya daha fazla toplu işi Service Bus kuyruğuna gönderecek şekilde hazırlar.This method takes a queue of messages, and prepares one or more batches to send to the Service Bus queue.

        static async Task SendMessageBatchAsync()
        {
            // create a Service Bus client 
            await using (ServiceBusClient client = new ServiceBusClient(connectionString))
            {
                // create a sender for the queue 
                ServiceBusSender sender = client.CreateSender(queueName);
    
                // get the messages to be sent to the Service Bus queue
                Queue<ServiceBusMessage> messages = CreateMessages();
    
                // total number of messages to be sent to the Service Bus queue
                int messageCount = messages.Count;
    
                // while all messages are not sent to the Service Bus queue
                while (messages.Count > 0)
                {
                    // start a new batch 
                    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
                    // add the first message to the batch
                    if (messageBatch.TryAddMessage(messages.Peek()))
                    {
                        // dequeue the message from the .NET queue once the message is added to the batch
                        messages.Dequeue();
                    }
                    else
                    {
                        // if the first message can't fit, then it is too large for the batch
                        throw new Exception($"Message {messageCount - messages.Count} is too large and cannot be sent.");
                    }
    
                    // add as many messages as possible to the current batch
                    while (messages.Count > 0 && messageBatch.TryAddMessage(messages.Peek()))
                    {
                        // dequeue the message from the .NET queue as it has been added to the batch
                        messages.Dequeue();
                    }
    
                    // now, send the batch
                    await sender.SendMessagesAsync(messageBatch);
    
                    // if there are any remaining messages in the .NET queue, the while loop repeats 
                }
    
                Console.WriteLine($"Sent a batch of {messageCount} messages to the topic: {queueName}");
            }
        }
    
  6. Main()Yöntemini aşağıdaki Async Main yöntemiyle değiştirin.Replace the Main() method with the following async Main method. Tek bir ileti ve sıraya toplu bir ileti göndermek için gönderme yöntemlerini çağırır.It calls both the send methods to send a single message and a batch of messages to the queue.

        static async Task Main()
        {
            // send a message to the queue
            await SendMessageAsync();
    
            // send a batch of messages to the queue
            await SendMessageBatchAsync();
        }
    
  7. Uygulamayı çalıştırın.Run the application. Aşağıdaki iletileri görmeniz gerekir.You should see the following messages.

    Sent a single message to the queue: myqueue
    Sent a batch of messages to the queue: myqueue
    
  8. Azure portal, aşağıdaki adımları izleyin:In the Azure portal, follow these steps:

    1. Service Bus ad alanına gidin.Navigate to your Service Bus namespace.
    2. Genel bakış sayfasında, alt orta bölmedeki kuyruğu seçin.On the Overview page, select the queue in the bottom-middle pane.
    3. Temel bileşenler bölümündeki değerlere dikkat edin.Notice the values in the Essentials section.

    Sayı ve boyut ile alınan iletiler

    Aşağıdaki değerlere dikkat edin:Notice the following values:

    • Kuyruğun etkin ileti sayısı değeri artık 4' dir.The Active message count value for the queue is now 4. Bu gönderen uygulamayı iletileri almadan her çalıştırdığınızda, bu değer 4 ' ü arttırır.Each time you run this sender app without retrieving the messages, this value increases by 4.
    • Kuyruğun geçerli boyutu, uygulamanın sıraya ileti eklemesi her seferinde Essentials 'daki geçerli değeri arttırır.The current size of the queue increments the CURRENT value in Essentials each time the app adds messages to the queue.
    • Alt ölçümler bölümündeki iletiler grafiğinde, kuyruk için dört gelen ileti olduğunu görebilirsiniz.In the Messages chart in the bottom Metrics section, you can see that there are four incoming messages for the queue.

Kuyruktan ileti almaReceive messages from a queue

Bu bölümde, kuyruktan ileti almak için kod ekleyeceksiniz.In this section, you'll add code to retrieve messages from the queue.

  1. Programİletileri ve hataları işleyen sınıfa aşağıdaki yöntemleri ekleyin.Add the following methods to the Program class that handle messages and any errors.

        // 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;
        }
    
  2. Sınıfına adlı bir yöntem ekleyin ReceiveMessagesAsync Program ve ileti almak için aşağıdaki kodu ekleyin.Add a method named ReceiveMessagesAsync to the Program class, and add the following code to receive messages.

        static async Task ReceiveMessagesAsync()
        {
            await using (ServiceBusClient client = new ServiceBusClient(connectionString))
            {
                // create a processor that we can use to process the messages
                ServiceBusProcessor processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions());
    
                // 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");
            }
        }
    
  3. Yönteminden yöntemine bir çağrı ekleyin ReceiveMessagesAsync Main .Add a call to ReceiveMessagesAsync method from the Main method. SendMessagesAsyncYalnızca ileti alma sınamasını yapmak istiyorsanız yöntemine açıklama ekleyin.Comment out the SendMessagesAsync method if you want to test only receiving of messages. Bunu yapmazsanız, kuyruğa başka dört ileti gönderildiğini görürsünüz.If you don't, you see another four messages sent to the queue.

        static async Task Main()
        {
            // send a message to the queue
            await SendMessageAsync();
    
            // send a batch of messages to the queue
            await SendMessageBatchAsync();
    
            // receive message from the queue
            await ReceiveMessagesAsync();
        }
    

Uygulamayı çalıştırmaRun the app

Uygulamayı çalıştırın.Run the application. Bir dakika bekleyip ileti almayı durdurmak için herhangi bir tuşa basın.Wait for a minute and then press any key to stop receiving messages. Aşağıdaki çıktıyı görmeniz gerekir (anahtar için ara çubuğu).You should see the following output (spacebar for the key).

Sent a single message to the queue: myqueue
Sent a batch of messages to the queue: myqueue
Wait for a minute and then press any key to end the processing
Received: Hello world!
Received: First message in the batch
Received: Second message in the batch
Received: Third message in the batch
Received: Hello world!
Received: First message in the batch
Received: Second message in the batch
Received: Third message in the batch

Stopping the receiver...
Stopped receiving messages

Portalı yeniden kontrol edin.Check the portal again.

  • Etkin ileti sayısı ve geçerli değerler artık 0' dır.The Active message count and CURRENT values are now 0.

  • Alt ölçümler bölümündeki iletiler grafiğinde, sıra için sekiz gelen ileti ve sekiz giden ileti olduğunu görebilirsiniz.In the Messages chart in the bottom Metrics section, you can see that there are eight incoming messages and eight outgoing messages for the queue.

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

Sonraki adımlarNext steps

Aşağıdaki belgelere ve örneklere bakın:See the following documentation and samples: