Приступая к работе с хранилищем очередей Azure с помощью .NETGet started with Azure Queue Storage using .NET

ОбзорOverview

Хранилище очередей Azure обеспечивает облачную передачу сообщений между компонентами приложения.Azure Queue Storage provides cloud messaging between application components. При проектировании приложений для масштабирования компоненты приложений часто отделяются, поэтому они могут масштабироваться независимо друг от друга.In designing applications for scale, application components are often decoupled so they can scale independently. Хранилище очередей обеспечивает асинхронный обмен сообщениями между компонентами приложения, выполняется ли они в облаке, на рабочем столе, на локальном сервере или на мобильном устройстве.Queue Storage delivers asynchronous messaging between application components, whether they are running in the cloud, on the desktop, on an on-premises server, or on a mobile device. Хранилище очередей также поддерживает управление асинхронными задачами и процесс создания рабочих потоков.Queue Storage also supports managing asynchronous tasks and building process work flows.

О данном учебникеAbout this tutorial

В этом руководстве показано, как написать код .NET для некоторых распространенных сценариев с помощью хранилища очередей Azure.This tutorial shows how to write .NET code for some common scenarios using Azure Queue Storage. Эти сценарии включают создание и удаление очередей, а также добавление, чтение и удаление сообщений.Scenarios covered include creating and deleting queues and adding, reading, and deleting queue messages.

Предполагаемое время выполнения: 45 минут.Estimated time to complete: 45 minutes

Обязательные условияPrerequisites

Что такое хранилище очередей?What is Queue storage?

Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получить доступ практически из любой точки мира с помощью вызовов с проверкой подлинности по протоколам HTTP или HTTPS.Azure Queue storage is a service for storing large numbers of messages that can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. Одно сообщение очереди может быть размером до 64 КБ, а очередь может содержать миллионы сообщений до общего ограничения емкости учетной записи хранения.A single queue message can be up to 64 KB in size, and a queue can contain millions of messages, up to the total capacity limit of a storage account. Хранилище очередей часто используется для создания невыполненной работы для асинхронной обработки.Queue storage is often used to create a backlog of work to process asynchronously.

Основные понятия службы очередейQueue service concepts

Служба очередей Azure содержит следующие компоненты:The Azure Queue service contains the following components:

Компоненты служба очередей Azure

  • Учетная запись хранения: Весь доступ к службе хранилища Azure осуществляется через учетную запись хранения.Storage Account: All access to Azure Storage is done through a storage account. См. сведения об учетных записях хранения.For more information about storage accounts, see Storage account overview.

  • Очередь. Очередь содержит набор сообщений.Queue: A queue contains a set of messages. Все сообщения должны находиться в очереди.All messages must be in a queue. Обратите внимание: имя очереди должно содержать только строчные символы.Note that the queue name must be all lowercase. Дополнительные сведения см. в статье о присвоении имен очередям и метаданным.For information on naming queues, see Naming Queues and Metadata.

  • Сообщение. Сообщение в любом формате размером до 64 КБ.Message: A message, in any format, of up to 64 KB. Сообщение может оставаться в очереди не более 7 дней.The maximum time that a message can remain in the queue is 7 days. Начиная с версии 2017-07-29, максимальный срок жизни может быть задан любым положительным числом или значением -1, свидетельствующим о том, что срок жизни сообщения неограничен.For version 2017-07-29 or later, the maximum time-to-live can be any positive number, or -1 indicating that the message doesn't expire. Если этот параметр не указан, срок жизни по умолчанию составляет семь дней.If this parameter is omitted, the default time-to-live is seven days.

  • Формат URL-адреса: Для адресации очередей используется следующий формат URL-адреса: http:// <storage account> . Queue.Core.Windows.NET/<queue>URL format: Queues are addressable using the following URL format: http://<storage account>.queue.core.windows.net/<queue>

    Следующий URL-адрес позволяет обратиться к очереди на схеме:The following URL addresses a queue in the diagram:

    http://myaccount.queue.core.windows.net/incoming-orders

Создание учетной записи хранения AzureCreate an Azure storage account

Самый простой способ создать первую учетную запись хранения Azure — воспользоваться порталом Azure.The easiest way to create your first Azure storage account is by using the Azure portal. Дополнительную информацию см. в статье Об учетных записях хранения Azure.To learn more, see Create a storage account.

Кроме того, создать учетную запись хранения Azure можно с помощью Azure PowerShell, Azure CLI или поставщика ресурсов службы хранилища Azure для .NET.You can also create an Azure storage account by using Azure PowerShell, Azure CLI, or the Azure Storage Resource Provider for .NET.

Если вы не хотите создавать учетную запись хранения в Azure в настоящее время, можно также использовать эмулятор хранения Азурите для запуска и тестирования кода в локальной среде.If you prefer not to create a storage account in Azure at this time, you can also use the Azurite storage emulator to run and test your code in a local environment. Дополнительные сведения см. в статье Использование эмулятора азурите для локальной разработки службы хранилища Azure.For more information, see Use the Azurite emulator for local Azure Storage development.

Настройка среды разработкиSet up your development environment

Теперь настройте среду разработки в Visual Studio для работы с примерами кода из этого руководства.Next, set up your development environment in Visual Studio so you're ready to try the code examples in this guide.

Создание нового проекта консольного приложения WindowsCreate a Windows console application project

В Visual Studio создайте новое консольное приложение Windows.In Visual Studio, create a new Windows console application. Ниже показано, как создать консольное приложение в Visual Studio 2019.The following steps show you how to create a console application in Visual Studio 2019. Эти же действия можно выполнить и в других версиях Visual Studio.The steps are similar in other versions of Visual Studio.

  1. Выберите файл > создать > проектSelect File > New > Project
  2. Выбор платформ > WindowsSelect Platform > Windows
  3. Выбор консольного приложения (.NET Framework)Select Console App (.NET Framework)
  4. Щелкните Далее.Select Next
  5. В поле имя проекта введите имя приложения.In the Project name field, enter a name for your application
  6. Выберите Создать.Select Create

Все примеры кода из этого руководства можно добавить в метод Main() в файле Program.cs консольного приложения.All code examples in this tutorial can be added to the Main() method of your console application's Program.cs file.

Клиентские библиотеки службы хранилища Azure можно использовать в любом типе приложения .NET, включая облачную службу или веб-приложение Azure, а также настольные и мобильные приложения.You can use the Azure Storage client libraries in any type of .NET application, including an Azure cloud service or web app, and desktop and mobile applications. Для упрощения в этом руководстве мы будем использовать консольное приложение.In this guide, we use a console application for simplicity.

Установка необходимых пакетов с помощью NuGetUse NuGet to install the required packages

Чтобы завершить работу с этим руководством, необходимо сослаться на следующие четыре пакета в проекте:You need to reference the following four packages in your project to complete this tutorial:

Для получения этих пакетов можно использовать NuGet.You can use NuGet to obtain these packages. Выполните следующие действия.Follow these steps:

  1. Щелкните правой кнопкой мыши проект в Обозреватель решений и выберите Управление пакетами NuGet.Right-click your project in Solution Explorer, and choose Manage NuGet Packages.
  2. Нажмите кнопку Обзор .Select Browse
  3. Выполните поиск в Интернете Azure.Storage.Queues и выберите установить , чтобы установить клиентскую библиотеку службы хранилища Azure и ее зависимости.Search online for Azure.Storage.Queues, and select Install to install the Azure Storage client library and its dependencies. Кроме того, будут установлены библиотеки Azure. Storage. Common и Azure. Core, которые являются зависимостями библиотеки очередей.This will also install the Azure.Storage.Common and Azure.Core libraries, which are dependencies of the queue library.
  4. Выполните поиск в Интернете System.Configuration.ConfigurationManager и выберите установить , чтобы установить Configuration Manager.Search online for System.Configuration.ConfigurationManager, and select Install to install the Configuration Manager.

Определение целевой средыDetermine your target environment

Примеры из этого руководства можно выполнять в двух средах.You have two environment options for running the examples in this guide:

  • Вы можете выполнить код в учетной записи хранения Azure в облаке.You can run your code against an Azure Storage account in the cloud.
  • Вы можете выполнить код в эмуляторе хранения Азурите.You can run your code against the Azurite storage emulator. Азурите — это локальная среда, которая эмулирует учетную запись хранения Azure в облаке.Azurite is a local environment that emulates an Azure Storage account in the cloud. Азурите — это бесплатный вариант для тестирования и отладки кода, пока приложение находится в разработке.Azurite is a free option for testing and debugging your code while your application is under development. Эмулятор использует известную учетную запись и ключ.The emulator uses a well-known account and key. Дополнительные сведения см. в статье Использование эмулятора азурите для локальной разработки и тестирования службы хранилища Azure.For more information, see Use the Azurite emulator for local Azure Storage development and testing.

Примечание

Вы можете указать эмулятор хранения, чтобы избежать затрат, связанных с хранилищем Azure.You can target the storage emulator to avoid incurring any costs associated with Azure Storage. Однако если выбрать целевую учетную запись хранения Azure в облаке, затраты на выполнение этого учебника будут незначительны.However, if you do choose to target an Azure Storage account in the cloud, costs for performing this tutorial will be negligible.

Получение строки подключения к хранилищуGet your storage connection string

Клиентские библиотеки службы хранилища Azure для .NET поддерживают использование строки подключения к хранилищу для настройки конечных точек и учетных данных для доступа к службам хранилища.The Azure Storage client libraries for .NET support using a storage connection string to configure endpoints and credentials for accessing storage services. См. сведения о том, как управлять ключами доступа к учетной записи хранения.For more information, see Manage storage account access keys.

Копирование учетных данных с портала AzureCopy your credentials from the Azure portal

Чтобы использовать пример кода, вам нужно авторизоваться для получения доступа к своей учетной записи хранения.The sample code needs to authorize access to your storage account. Для этого предоставьте приложению учетные данные учетной записи хранения в виде строки подключения.To authorize, you provide the application with your storage account credentials in the form of a connection string. Просмотр учетных данных учетной записи хранения:To view your storage account credentials:

  1. Перейдите на портал Azure.Navigate to the Azure portal.

  2. Перейдите к учетной записи хранения.Locate your storage account.

  3. В разделе Параметры учетной записи хранения выберите параметр Ключи доступа.In the Settings section of the storage account overview, select Access keys. Появятся ключи доступа к учетной записи и полная строка подключения для каждого ключа.Your account access keys appear, as well as the complete connection string for each key.

  4. Найдите значение Строка подключения в разделе key1 и нажмите кнопку Скопировать, чтобы скопировать строку подключения.Find the Connection string value under key1, and click the Copy button to copy the connection string. На следующем этапе вы добавите значение строки подключения в переменную среды.You will add the connection string value to an environment variable in the next step.

    Снимок экрана, на котором показано, как скопировать строку подключения с портала Azure

Дополнительные сведения о строках подключения см. в руководстве по настройке строк подключения службы хранилища Azure.For more information about connection strings, see Configure a connection string to Azure Storage.

Примечание

Ключ учетной записи хранения похож на корневой пароль для вашей учетной записи хранения.Your storage account key is similar to the root password for your storage account. Не забудьте защитить ключ учетной записи хранения.Always be careful to protect your storage account key. Не сообщайте его другим пользователям, не определяйте его в коде и не храните его в текстовом файле, доступном другим пользователям.Avoid distributing it to other users, hard-coding it, or saving it in a plain-text file that is accessible to others. Повторно создайте ключ с помощью портала Azure, если вы считаете, что он мог быть скомпрометирован.Regenerate your key by using the Azure portal if you believe it may have been compromised.

Строку подключения хранилища рекомендуется хранить в файле конфигурации.The best way to maintain your storage connection string is in a configuration file. Чтобы настроить строку подключения, откройте файл app.config в обозревателе решений Visual Studio.To configure your connection string, open the app.config file from Solution Explorer in Visual Studio. Добавьте содержимое <appSettings> элемента, показанного здесь.Add the contents of the <appSettings> element shown here. Замените connection-string значением, скопированным из учетной записи хранения на портале:Replace connection-string with the value you copied from your storage account in the portal:

<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <appSettings>
        <add key="StorageConnectionString" value="connection-string" />
    </appSettings>
</configuration>

Например, параметр конфигурации может быть приблизительно таким:For example, your configuration setting appears similar to:

<add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=storagesample;AccountKey=GMuzNHjlB3S9itqZJHHCnRkrokLkcSyW7yK9BRbGp0ENePunLPwBgpxV1Z/pVo9zpem/2xSHXkMqTHHLcx8XRA==EndpointSuffix=core.windows.net" />

Для работы с эмулятором хранения Азурите можно использовать ярлык, сопоставляемый с хорошо известным именем и ключом учетной записи.To target the Azurite storage emulator, you can use a shortcut that maps to the well-known account name and key. В этом случае параметр строки подключения будет таким:In that case, your connection string setting is:

<add key="StorageConnectionString" value="UseDevelopmentStorage=true" />

Добавление директив usingAdd using directives

Добавьте в верхнюю часть файла Program.cs следующие директивы using:Add the following using directives to the top of the Program.cs file:

using System; // Namespace for Console output
using System.Configuration; // Namespace for ConfigurationManager
using System.Threading.Tasks; // Namespace for Task
using Azure.Storage.Queues; // Namespace for Queue storage types
using Azure.Storage.Queues.Models; // Namespace for PeekedMessage

Создание клиента хранилища очередейCreate the Queue Storage client

QueueClientКласс позволяет получать очереди, хранящиеся в хранилище очередей.The QueueClient class enables you to retrieve queues stored in Queue Storage. Вот один из способов создать клиента службы.Here's one way to create the service client:

//-------------------------------------------------
// Create the queue service client
//-------------------------------------------------
public void CreateQueueClient(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to create and manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);
}

Теперь все готово для написания кода, считывающего данные из очереди и записывающего данные в хранилище очередей.Now you are ready to write code that reads data from and writes data to Queue Storage.

Создание очередиCreate a queue

В этом примере показано, как создать очередь:This example shows how to create a queue:

//-------------------------------------------------
// Create a message queue
//-------------------------------------------------
public bool CreateQueue(string queueName)
{
    try
    {
        // Get the connection string from app settings
        string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

        // Instantiate a QueueClient which will be used to create and manipulate the queue
        QueueClient queueClient = new QueueClient(connectionString, queueName);

        // Create the queue
        queueClient.CreateIfNotExists();

        if (queueClient.Exists())
        {
            Console.WriteLine($"Queue created: '{queueClient.Name}'");
            return true;
        }
        else
        {
            Console.WriteLine($"Make sure the Azurite storage emulator running and try again.");
            return false;
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Exception: {ex.Message}\n\n");
        Console.WriteLine($"Make sure the Azurite storage emulator running and try again.");
        return false;
    }
}

Вставка сообщения в очередьInsert a message into a queue

Чтобы вставить сообщение в существующую очередь, вызовите SendMessage метод.To insert a message into an existing queue, call the SendMessage method. Сообщение может быть либо строкой (в формате UTF-8), либо массивом байтов.A message can be either a string (in UTF-8 format) or a byte array. Следующий код создает очередь (если она не существует) и вставляет сообщение:The following code creates a queue (if it doesn't exist) and inserts a message:

//-------------------------------------------------
// Insert a message into a queue
//-------------------------------------------------
public void InsertMessage(string queueName, string message)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to create and manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    // Create the queue if it doesn't already exist
    queueClient.CreateIfNotExists();

    if (queueClient.Exists())
    {
        // Send a message to the queue
        queueClient.SendMessage(message);
    }

    Console.WriteLine($"Inserted: {message}");
}

Просмотр следующего сообщенияPeek at the next message

Вы можете просматривать сообщения в очереди, не удаляя их из очереди, вызывая PeekMessages метод.You can peek at the messages in the queue without removing them from the queue by calling the PeekMessages method. Если значение для параметра не передается maxMessages , по умолчанию используется просмотр одного сообщения.If you don't pass a value for the maxMessages parameter, the default is to peek at one message.

//-------------------------------------------------
// Peek at a message in the queue
//-------------------------------------------------
public void PeekMessage(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    { 
        // Peek at the next message
        PeekedMessage[] peekedMessage = queueClient.PeekMessages();

        // Display the message
        Console.WriteLine($"Peeked message: '{peekedMessage[0].MessageText}'");
    }
}

Изменение содержимого сообщения в очередиChange the contents of a queued message

Вы можете изменить содержимое сообщения непосредственно в очереди.You can change the contents of a message in-place in the queue. Если сообщение представляет собой рабочую задачу, можно использовать эту функцию для обновления состояния рабочей задачи.If the message represents a work task, you could use this feature to update the status of the work task. Следующий код добавляет новое содержимое в очередь сообщений и продлевает время ожидания видимости еще на 60 секунд.The following code updates the queue message with new contents, and sets the visibility timeout to extend another 60 seconds. Это сохраняет состояние работы, связанной с данным сообщением, и позволяет клиенту продолжить работу с сообщением на протяжении еще одной минуты.This saves the state of work associated with the message, and gives the client another minute to continue working on the message. Эту методику можно использовать для контроля многошаговых рабочих процессов в сообщениях очереди без необходимости запуска с начала, если шаг обработки завершается сбоем из-за сбоя оборудования или программного обеспечения.You could use this technique to track multistep workflows on queue messages, without having to start over from the beginning if a processing step fails due to hardware or software failure. Обычно также сохраняется счетчик повторов. Если количество повторов сообщения превысит n раз, его нужно удалить.Typically, you would keep a retry count as well, and if the message is retried more than n times, you would delete it. Это обеспечивает защиту от сообщений, которые инициируют ошибку приложения при каждой попытке обработки.This protects against a message that triggers an application error each time it is processed.

//-------------------------------------------------
// Update an existing message in the queue
//-------------------------------------------------
public void UpdateMessage(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    {
        // Get the message from the queue
        QueueMessage[] message = queueClient.ReceiveMessages();

        // Update the message contents
        queueClient.UpdateMessage(message[0].MessageId, 
                message[0].PopReceipt, 
                "Updated contents",
                TimeSpan.FromSeconds(60.0)  // Make it invisible for another 60 seconds
            );
    }
}

Удаление следующего сообщения из очередиDequeue the next message

Вывод сообщения из очереди в два этапа.Dequeue a message from a queue in two steps. При вызове ReceiveMessages вы получаете следующее сообщение в очереди.When you call ReceiveMessages, you get the next message in a queue. Сообщение, возвращаемое методом ReceiveMessages, становится невидимым для другого кода, считывающего сообщения из этой очереди.A message returned from ReceiveMessages becomes invisible to any other code reading messages from this queue. По умолчанию это сообщение остается невидимым в течение 30 секунд.By default, this message stays invisible for 30 seconds. Чтобы завершить удаление сообщения из очереди, необходимо также вызвать метод DeleteMessage .To finish removing the message from the queue, you must also call DeleteMessage. Этот двухэтапный процесс удаления сообщения позволяет удостовериться, что если коду не удастся обработать сообщение из-за сбоя оборудования или программного обеспечения, другой экземпляр кода сможет получить то же сообщение и повторить попытку.This two-step process of removing a message assures that if your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. Код вызывается DeleteMessage сразу после обработки сообщения.Your code calls DeleteMessage right after the message has been processed.

//-------------------------------------------------
// Process and remove a message from the queue
//-------------------------------------------------
public void DequeueMessage(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    {
        // Get the next message
        QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();

        // Process (i.e. print) the message in less than 30 seconds
        Console.WriteLine($"Dequeued message: '{retrievedMessage[0].MessageText}'");

        // Delete the message
        queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
    }
}

Использование шаблона Async-Await с общими интерфейсами API хранилища очередейUse the Async-Await pattern with common Queue Storage APIs

В этом примере показано, как использовать шаблон Async-Await с общими интерфейсами API хранилища очередей.This example shows how to use the Async-Await pattern with common Queue Storage APIs. В примере вызывается асинхронная версия каждого из указанных методов, как указано Async суффиксом каждого метода.The sample calls the asynchronous version of each of the given methods, as indicated by the Async suffix of each method. При использовании асинхронного метода шаблон Async-Await приостанавливает локальное выполнение до завершения вызова.When an async method is used, the Async-Await pattern suspends local execution until the call completes. Благодаря этому текущий поток может выполнять другие задачи, что позволяет избежать возникновения узких мест и повысить общую скорость реагирования приложения.This behavior allows the current thread to do other work, which helps avoid performance bottlenecks and improves the overall responsiveness of your application. Дополнительные сведения об использовании алгоритма Async-Await в .NET см. в статье Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic).For more details on using the Async-Await pattern in .NET, see Async and Await (C# and Visual Basic)

//-------------------------------------------------
// Perform queue operations asynchronously
//-------------------------------------------------
public async Task QueueAsync(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    // Create the queue if it doesn't already exist
    await queueClient.CreateIfNotExistsAsync();

    if (await queueClient.ExistsAsync())
    {
        Console.WriteLine($"Queue '{queueClient.Name}' created");
    }
    else
    {
        Console.WriteLine($"Queue '{queueClient.Name}' exists");
    }

    // Async enqueue the message
    await queueClient.SendMessageAsync("Hello, World");
    Console.WriteLine($"Message added");

    // Async receive the message
    QueueMessage[] retrievedMessage = await queueClient.ReceiveMessagesAsync();
    Console.WriteLine($"Retrieved message with content '{retrievedMessage[0].MessageText}'");

    // Async delete the message
    await queueClient.DeleteMessageAsync(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
    Console.WriteLine($"Deleted message: '{retrievedMessage[0].MessageText}'");

    // Async delete the queue
    await queueClient.DeleteAsync();
    Console.WriteLine($"Deleted queue: '{queueClient.Name}'");
}

Использование дополнительных параметров для удаления сообщений из очередиUse additional options for dequeuing messages

Способ извлечения сообщения из очереди можно настроить двумя способами.There are two ways you can customize message retrieval from a queue. Во-первых, можно получить пакет сообщений (до 32 сообщений).First, you can get a batch of messages (up to 32). Во-вторых, можно задать более длительное или короткое время ожидания видимости, чтобы предоставить коду больше или меньше времени на полную обработку каждого сообщения.Second, you can set a longer or shorter invisibility timeout, allowing your code more or less time to fully process each message.

В следующем примере кода метод используется ReceiveMessages для получения 20 сообщений в одном вызове.The following code example uses the ReceiveMessages method to get 20 messages in one call. Затем он обрабатывает каждое сообщение с помощью цикла foreach.Then it processes each message using a foreach loop. Он также задает время ожидания невидимости 5 минут для каждого сообщения.It also sets the invisibility timeout to five minutes for each message. Обратите внимание, что пять минут начинается для всех сообщений в одно и то же время, поэтому по истечении пяти минут после вызова функции ReceiveMessages все сообщения, которые не были удалены, снова станут видимыми.Note that the five minutes starts for all messages at the same time, so after five minutes have passed since the call to ReceiveMessages, any messages which have not been deleted will become visible again.

//-----------------------------------------------------
// Process and remove multiple messages from the queue
//-----------------------------------------------------
public void DequeueMessages(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    {
        // Receive and process 20 messages
        QueueMessage[] receivedMessages = queueClient.ReceiveMessages(20, TimeSpan.FromMinutes(5));

        foreach (QueueMessage message in receivedMessages)
        {
            // Process (i.e. print) the messages in less than 5 minutes
            Console.WriteLine($"De-queued message: '{message.MessageText}'");

            // Delete the message
            queueClient.DeleteMessage(message.MessageId, message.PopReceipt);
        }
    }
}

Получение длины очередиGet the queue length

Вы можете узнать приблизительное количество сообщений в очереди.You can get an estimate of the number of messages in a queue. GetPropertiesМетод возвращает свойства очереди, включая число сообщений.The GetProperties method returns queue properties including the message count. ApproximateMessagesCountСвойство содержит приблизительное количество сообщений в очереди.The ApproximateMessagesCount property contains the approximate number of messages in the queue. Это число не меньше фактического числа сообщений в очереди, но может быть больше.This number is not lower than the actual number of messages in the queue, but could be higher.

//-----------------------------------------------------
// Get the approximate number of messages in the queue
//-----------------------------------------------------
public void GetQueueLength(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    {
        QueueProperties properties = queueClient.GetProperties();

        // Retrieve the cached approximate message count.
        int cachedMessagesCount = properties.ApproximateMessagesCount;

        // Display number of messages.
        Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
    }
}

Удаление очередиDelete a queue

Чтобы удалить очередь и все сообщения, содержащиеся в ней, вызовите Delete метод для объекта очереди.To delete a queue and all the messages contained in it, call the Delete method on the queue object.

//-------------------------------------------------
// Delete the queue
//-------------------------------------------------
public void DeleteQueue(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    {
        // Delete the queue
        queueClient.Delete();
    }

    Console.WriteLine($"Queue deleted: '{queueClient.Name}'");
}

Дальнейшие действияNext steps

Теперь, когда вы узнали основные сведения о хранилище очередей, перейдите по следующим ссылкам, чтобы узнать о более сложных задачах хранилища.Now that you've learned the basics of Queue Storage, follow these links to learn about more complex storage tasks.