Приступая к работе с подключенными службами хранилища очередей Azure и Visual Studio (проекты облачных служб)

Совет

Пробное использование обозревателя хранилищ Microsoft Azure

Обозреватель хранилищ Microsoft Azure — это бесплатное автономное приложение от корпорации Майкрософт, позволяющее визуализировать данные из службы хранилища Azure на платформе Windows, macOS и Linux.

Обзор

Важно!

Облачные службы (классическая версия) объявлены устаревшими для новых клиентов. Их поддержка будет полностью прекращена 31 августа 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой . Это новая модель развертывания на основе Azure Resource Manager.

В этой статье описывается, как приступить к работе с хранилищем очередей Azure в Visual Studio после создания или ссылки на учетную запись хранения Azure в проекте облачных служб с помощью диалогового окна добавления подключенных служб Visual Studio.

Мы покажем, как создать очередь в коде. Кроме того, вы узнаете, как выполнять базовые операции с очередями, например добавлять, изменять, считывать и удалять сообщения в очередях. Примеры написаны на языке C# и используют клиентскую библиотеку службы хранилища Microsoft Azure для .NET.

Операция Добавить подключенные службы устанавливает соответствующие пакеты NuGet для доступа к службе хранилища Azure в вашем проекте и добавляет строку подключения для учетной записи хранения в файлы конфигурации проекта.

Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получить доступ практически из любой точки мира с помощью вызовов с проверкой подлинности по протоколам HTTP или HTTPS. Одно сообщение очереди может быть размером до 64 КБ, а очередь может содержать миллионы сообщений до общего ограничения емкости учетной записи хранения.

Доступ к очередям в коде

Для доступа к очередям в проектах облачных служб Visual Studio необходимо включить следующие элементы во все файлы исходного кода C#, которые обращаются к хранилищу очередей Azure.

  1. Убедитесь, что объявления пространств имен в верхней части файла C# содержат указанные ниже выражения using .

    using Microsoft.Framework.Configuration;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Queue;
    
  2. Получите объект CloudStorageAccount , представляющий данные учетной записи хранения. Используйте следующий код, чтобы получить строку подключения и сведения об учетной записи хранения из конфигурации службы Azure.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  3. Используйте объект CloudQueueClient для ссылки на объекты очереди в вашей учетной записи хранения.

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    
  4. Получите объект CloudQueue для ссылки на определенную очередь.

    // Get a reference to a queue named "messageQueue"
    CloudQueue messageQueue = queueClient.GetQueueReference("messageQueue");
    

ПРИМЕЧАНИЕ. Вставьте весь код, представленный выше, перед кодом в следующих примерах.

Создание очереди в коде

Чтобы создать очередь Azure в коде, просто добавьте вызов CreateIfNotExists.

// Create the CloudQueue if it does not exist
messageQueue.CreateIfNotExists();

Добавление сообщения в очередь

Чтобы вставить сообщение в существующую очередь, создайте объект CloudQueueMessage, а затем вызовите метод AddMessage.

Для создания объекта CloudQueueMessage можно использовать либо строку (в формате UTF-8), либо массив типа byte.

Ниже приведен пример, который вставляет сообщение "Hello, World".

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
messageQueue.AddMessage(message);

Чтение сообщения в очереди

Просмотреть сообщение в начале очереди, не удаляя его, можно с помощью метода PeekMessage .

// Peek at the next message
CloudQueueMessage peekedMessage = messageQueue.PeekMessage();

Чтение и удаление сообщения в очереди

Ваш код может удалить сообщение из очереди в два этапа.

  1. Вызовите метод GetMessage , чтобы получить следующее сообщение в очереди. Сообщение, возвращаемое методом GetMessage , становится невидимым для другого кода, считывающего сообщения из этой очереди. По умолчанию это сообщение остается невидимым в течение 30 секунд.
  2. Чтобы завершить удаление сообщения из очереди, вызовите метод DeleteMessage.

Этот двухэтапный процесс удаления сообщения позволяет удостовериться, что если коду не удастся обработать сообщение из-за сбоя оборудования или программного обеспечения, другой экземпляр кода сможет получить то же сообщение и повторить попытку. Указанный ниже код вызывает метод DeleteMessage сразу после обработки сообщения.

// Get the next message in the queue.
CloudQueueMessage retrievedMessage = messageQueue.GetMessage();

// Process the message in less than 30 seconds

// Then delete the message.
await messageQueue.DeleteMessage(retrievedMessage);

Дополнительные варианты обработки и удаления сообщений в очереди

Способ извлечения сообщения из очереди можно настроить двумя способами.

  • Можно получить пакет сообщений (до 32 сообщений).
  • Можно задать более длительное или короткое время ожидания невидимости, чтобы предоставить коду больше или меньше времени на полную обработку каждого сообщения. В следующем примере кода метод GetMessages используется для получения 20 сообщений в одном вызове. Затем он обрабатывает каждое сообщение с помощью цикла foreach . Он также задает время ожидания невидимости 5 минут для каждого сообщения. Обратите внимание на то, что пятиминутный период начинается для всех сообщений одновременно, поэтому по прошествии пяти минут с момента вызова GetMessagesвсе сообщения, которые не были удалены, снова становятся видимыми.

Ниже приведен пример:

foreach (CloudQueueMessage message in messageQueue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
    // Process all messages in less than 5 minutes, deleting each message after processing.

    // Then delete the message after processing
    messageQueue.DeleteMessage(message);

}

Получение длины очереди

Вы можете узнать приблизительное количество сообщений в очереди. Метод FetchAttributes отправляет в службу очередей запрос на извлечение атрибутов очереди, включая количество сообщений. Свойство ApproximateMethodCount возвращает последнее значение, полученное с использованием метода FetchAttributes, без вызова службы очередей.

// Fetch the queue attributes.
messageQueue.FetchAttributes();

// Retrieve the cached approximate message count.
int? cachedMessageCount = messageQueue.ApproximateMessageCount;

// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);

Использование алгоритма Async-Await со стандартными API очередей Azure

В этом примере показано использование алгоритма Async-Await со стандартными API очередей Azure. Вызывается асинхронная версия каждого из методов (на это указывает постфикс Async в имени метода). При использовании асинхронного метода алгоритм Async-Await приостанавливает локальное выполнение процесса до завершения вызова. Благодаря этому текущий поток может выполнять другие задачи, что позволяет избежать возникновения узких мест и повысить общую скорость реагирования приложения. Дополнительные сведения об использовании алгоритма Async-Await в .NET см. в статье Асинхронное программирование с использованием ключевых слов Async и Await (C# и Visual Basic).

// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");

// Add the message asynchronously
await messageQueue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");

// Async dequeue the message
CloudQueueMessage retrievedMessage = await messageQueue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

// Delete the message asynchronously
await messageQueue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

Удаление очереди

Чтобы удалить очередь и все сообщения в ней, вызовите метод Delete для объекта очереди.

// Delete the queue.
messageQueue.Delete();

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

Вы получили основные сведения о хранилище очередей Azure. Дополнительные сведения о более сложных задачах по использованию хранилища можно найти по следующим ссылкам.