Service Bus kuyrukları ile çalışmaya başlamaGet started with Service Bus queues

Bu öğreticide, Service Bus kuyruğuna ileti göndermek ve ileti almak için .NET Core konsol uygulamaları oluşturacaksınız.In this tutorial, you create .NET Core console applications to send messages to and receive messages from a Service Bus queue.

Ön koşullarPrerequisites

Kuyruğa ileti göndermeSend messages to the queue

Kuyruğa ileti göndermek için, Visual Studio'yu kullanarak bir C# konsol uygulaması yazın.To send messages to the queue, write a C# console application using Visual Studio.

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#. Bu örnek, uygulama Coresenderapp' i adlandırır.This example names the app CoreSenderApp.

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. Microsoft. Azure. ServiceBus araması yapın ve seçin.Search for and select Microsoft.Azure.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.

    NuGet paketi seçme

Kuyruğa ileti göndermek için kod yazmaWrite 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.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.ServiceBus;
    
  2. ProgramSınıfında, aşağıdaki değişkenleri bildirin:In the Program class, declare the following variables:

    const string ServiceBusConnectionString = "<your_connection_string>";
    const string QueueName = "<your_queue_name>";
    static IQueueClient queueClient;
    

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

  3. Main()Yöntemini aşağıdaki Async Main yöntemiyle değiştirin.Replace the Main() method with the following async Main method. SendMessagesAsync()Kuyruğa ileti göndermek için bir sonraki adımda ekleyeceğiniz yöntemi çağırır.It calls the SendMessagesAsync() method that you will add in the next step to send messages to the queue.

    public static async Task Main(string[] args)
    {    
        const int numberOfMessages = 10;
        queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
    
        Console.WriteLine("======================================================");
        Console.WriteLine("Press ENTER key to exit after sending all the messages.");
        Console.WriteLine("======================================================");
    
        // Send messages.
        await SendMessagesAsync(numberOfMessages);
    
        Console.ReadKey();
    
        await queueClient.CloseAsync();
    }
    
  4. Doğrudan yönteminden sonra MainAsync() , SendMessagesAsync() tarafından belirtilen ileti sayısını gönderme işini yapan aşağıdaki yöntemi ekleyin numberOfMessagesToSend (Şu anda 10 ' a ayarlanır):Directly after the MainAsync() method, add the following SendMessagesAsync() method that does the work of sending the number of messages specified by numberOfMessagesToSend (currently set to 10):

    static async Task SendMessagesAsync(int numberOfMessagesToSend)
    {
        try
        {
            for (var i = 0; i < numberOfMessagesToSend; i++)
            {
                // Create a new message to send to the queue.
                string messageBody = $"Message {i}";
                var message = new Message(Encoding.UTF8.GetBytes(messageBody));
    
                // Write the body of the message to the console.
                Console.WriteLine($"Sending message: {messageBody}");
    
                // Send the message to the queue.
                await queueClient.SendAsync(message);
            }
        }
        catch (Exception exception)
        {
            Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
        }
    }
    

Program.cs dosyanız şöyle görünmelidir.Here is what your Program.cs file should look like.

namespace CoreSenderApp
{
    using System;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.ServiceBus;

    class Program
    {
        // Connection String for the namespace can be obtained from the Azure portal under the 
        // 'Shared Access policies' section.
        const string ServiceBusConnectionString = "<your_connection_string>";
        const string QueueName = "<your_queue_name>";
        static IQueueClient queueClient;

        public static async Task Main(string[] args)
        {    
            const int numberOfMessages = 10;
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
    
            Console.WriteLine("======================================================");
            Console.WriteLine("Press ENTER key to exit after sending all the messages.");
            Console.WriteLine("======================================================");
    
            // Send messages.
            await SendMessagesAsync(numberOfMessages);
    
            Console.ReadKey();
    
            await queueClient.CloseAsync();
        }

        static async Task SendMessagesAsync(int numberOfMessagesToSend)
        {
            try
            {
                for (var i = 0; i < numberOfMessagesToSend; i++)
                {
                    // Create a new message to send to the queue
                    string messageBody = $"Message {i}";
                    var message = new Message(Encoding.UTF8.GetBytes(messageBody));

                    // Write the body of the message to the console
                    Console.WriteLine($"Sending message: {messageBody}");

                    // Send the message to the queue
                    await queueClient.SendAsync(message);
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
            }
        }
    }
}

Programı çalıştırın ve Azure portal denetleyin.Run the program and check the Azure portal.

Sıra Essentials 'ıgöstermek için ad alanı genel bakış penceresinde kuyruğunuzun adını seçin.Select the name of your queue in the namespace Overview window to display queue Essentials.

Sayı ve boyut ile alınan iletiler

Kuyruğun etkin ileti sayısı değeri artık 10' dur.The Active message count value for the queue is now 10. Bu gönderen uygulamayı iletileri almadan her çalıştırdığınızda, bu değer 10 artar.Each time you run this sender app without retrieving the messages, this value increases by 10.

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.

Sonraki bölümde bu iletilerin nasıl alınacağını açıklanmaktadır.The next section describes how to retrieve these messages.

Kuyruktan ileti almaReceive messages from the queue

Gönderdiğiniz iletileri almak için başka bir konsol uygulaması (.NET Core) uygulaması oluşturun.To receive the messages you sent, create another Console App (.NET Core) application. Gönderen uygulaması için yaptığınız gibi Microsoft. Azure. ServiceBus NuGet paketini yükleyebilirsiniz.Install the Microsoft.Azure.ServiceBus NuGet package, as you did for the sender application.

Kuyruktan ileti almak için kod yazmaWrite code to receive messages from 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.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.ServiceBus;
    
  2. ProgramSınıfında, aşağıdaki değişkenleri bildirin:In the Program class, declare the following variables:

    const string ServiceBusConnectionString = "<your_connection_string>";
    const string QueueName = "<your_queue_name>";
    static IQueueClient queueClient;
    

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

  3. Main() yöntemini aşağıdaki kod ile değiştirin:Replace the Main() method with the following code:

    static void Main(string[] args)
    {
        MainAsync().GetAwaiter().GetResult();
    }
    
    static async Task MainAsync()
    {
        queueClient = new QueueClient(ServiceBusConnectionString, QueueName);
    
        Console.WriteLine("======================================================");
        Console.WriteLine("Press ENTER key to exit after receiving all the messages.");
        Console.WriteLine("======================================================");
    
        // Register QueueClient's MessageHandler and receive messages in a loop
        RegisterOnMessageHandlerAndReceiveMessages();
    
        Console.ReadKey();
    
        await queueClient.CloseAsync();
    }
    
  4. Doğrudan yönteminden sonra MainAsync() , ileti işleyicisini kaydeden ve gönderen uygulama tarafından gönderilen iletileri alan aşağıdaki yöntemi ekleyin:Directly after the MainAsync() method, add the following method, which registers the message handler and receives the messages sent by the sender application:

    static void RegisterOnMessageHandlerAndReceiveMessages()
    {
        // Configure the message handler options in terms of exception handling, number of concurrent messages to deliver, etc.
        var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
        {
            // Maximum number of concurrent calls to the callback ProcessMessagesAsync(), set to 1 for simplicity.
            // Set it according to how many messages the application wants to process in parallel.
            MaxConcurrentCalls = 1,
    
            // Indicates whether the message pump should automatically complete the messages after returning from user callback.
            // False below indicates the complete operation is handled by the user callback as in ProcessMessagesAsync().
            AutoComplete = false
        };
    
        // Register the function that processes messages.
        queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
    }
    
  5. Önceki metottan hemen sonra, alınan mesajları işlemek için aşağıdaki ProcessMessagesAsync() metodunu ekleyin:Directly after the previous method, add the following ProcessMessagesAsync() method to process the received messages:

    static async Task ProcessMessagesAsync(Message message, CancellationToken token)
    {
        // Process the message.
        Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");
    
        // Complete the message so that it is not received again.
        // This can be done only if the queue Client is created in ReceiveMode.PeekLock mode (which is the default).
        await queueClient.CompleteAsync(message.SystemProperties.LockToken);
    
        // Note: Use the cancellationToken passed as necessary to determine if the queueClient has already been closed.
        // If queueClient has already been closed, you can choose to not call CompleteAsync() or AbandonAsync() etc.
        // to avoid unnecessary exceptions.
    }
    
  6. Son olarak, olası özel durumları işlemek için aşağıdaki metodu ekleyin:Finally, add the following method to handle any exceptions that might occur:

    // Use this handler to examine the exceptions received on the message pump.
    static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
    {
        Console.WriteLine($"Message handler encountered an exception {exceptionReceivedEventArgs.Exception}.");
        var context = exceptionReceivedEventArgs.ExceptionReceivedContext;
        Console.WriteLine("Exception context for troubleshooting:");
        Console.WriteLine($"- Endpoint: {context.Endpoint}");
        Console.WriteLine($"- Entity Path: {context.EntityPath}");
        Console.WriteLine($"- Executing Action: {context.Action}");
        return Task.CompletedTask;
    }
    

Program.cs dosyanız şu şekilde görünmelidir:Here is what your Program.cs file should look like:

namespace CoreReceiverApp
{
    using System;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using Microsoft.Azure.ServiceBus;

    class Program
    {
        // Connection String for the namespace can be obtained from the Azure portal under the 
        // 'Shared Access policies' section.
        const string ServiceBusConnectionString = "<your_connection_string>";
        const string QueueName = "<your_queue_name>";
        static IQueueClient queueClient;

        static void Main(string[] args)
        {
            MainAsync().GetAwaiter().GetResult();
        }

        static async Task MainAsync()
        {
            queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

            Console.WriteLine("======================================================");
            Console.WriteLine("Press ENTER key to exit after receiving all the messages.");
            Console.WriteLine("======================================================");

            // Register QueueClient's MessageHandler and receive messages in a loop
            RegisterOnMessageHandlerAndReceiveMessages();
 
            Console.ReadKey();

            await queueClient.CloseAsync();
        }

        static void RegisterOnMessageHandlerAndReceiveMessages()
        {
            // Configure the MessageHandler Options in terms of exception handling, number of concurrent messages to deliver etc.
            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                // Maximum number of Concurrent calls to the callback `ProcessMessagesAsync`, set to 1 for simplicity.
                // Set it according to how many messages the application wants to process in parallel.
                MaxConcurrentCalls = 1,

                // Indicates whether MessagePump should automatically complete the messages after returning from User Callback.
                // False below indicates the Complete will be handled by the User Callback as in `ProcessMessagesAsync` below.
                AutoComplete = false
            };

            // Register the function that will process messages
            queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
        }

        static async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            // Process the message
            Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");

            // Complete the message so that it is not received again.
            // This can be done only if the queueClient is created in ReceiveMode.PeekLock mode (which is default).
            await queueClient.CompleteAsync(message.SystemProperties.LockToken);

            // Note: Use the cancellationToken passed as necessary to determine if the queueClient has already been closed.
            // If queueClient has already been Closed, you may chose to not call CompleteAsync() or AbandonAsync() etc. calls 
            // to avoid unnecessary exceptions.
        }

        static Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
        {
            Console.WriteLine($"Message handler encountered an exception {exceptionReceivedEventArgs.Exception}.");
            var context = exceptionReceivedEventArgs.ExceptionReceivedContext;
            Console.WriteLine("Exception context for troubleshooting:");
            Console.WriteLine($"- Endpoint: {context.Endpoint}");
            Console.WriteLine($"- Entity Path: {context.EntityPath}");
            Console.WriteLine($"- Executing Action: {context.Action}");
            return Task.CompletedTask;
        }
    }
}

Programı çalıştırın ve portalı tekrar denetleyin.Run the program, and 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.

İletiler alındıktan sonra kuyruğa al

Tebrikler!Congratulations! Artık bir kuyruk oluşturdunuz, bu kuyruğa bir ileti kümesi gönderdiniz ve bu iletileri aynı kuyruktan almış oldunuz.You've now created a queue, sent a set of messages to that queue, and received those messages from the same queue.

Not

Service Bus kaynaklarını Service Bus Explorerile yönetebilirsiniz.You can manage Service Bus resources with Service Bus Explorer. Service Bus Gezgini kullanıcıların bir Service Bus ad alanına kolayca bağlanmasına ve mesajlaşma varlıklarını yönetmesine olanak tanır.The Service Bus Explorer allows users to easily connect to a Service Bus namespace and administer messaging entities. Araç içeri/dışarı aktarma işlevselliği gibi gelişmiş özellikler ya da konuları, kuyrukları, abonelikleri, geçiş hizmetlerini, Bildirim Hub 'larını ve Olay Hub 'larını test etme özelliğini sağlar.The tool provides advanced features like import/export functionality or the ability to test topics, queues, subscriptions, relay services, notification hubs, and event hubs.

Sonraki adımlarNext steps

Service Bus mesajlaşmasının daha gelişmiş özelliklerini gösteren örneklerin bulunduğu GitHub depomuza göz atın.Check out our GitHub repository with samples that demonstrate some of the more advanced features of Service Bus messaging.