Приступая к работе с подключенными службами хранилища очередей 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 с помощью .NET.
- Общие сведения о службе хранилища Azure см. в документации по службе хранилища.
- Общие сведения об облачных службах Azure см. в документации по облачным службам.
- Дополнительную информацию о программировании для ASP.NET см. в разделе ASP.NET.
Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получить доступ практически из любой точки мира с помощью вызовов с проверкой подлинности по протоколам HTTP или HTTPS. Одно сообщение очереди может быть размером до 64 КБ, а очередь может содержать миллионы сообщений до общего ограничения емкости учетной записи хранения.
Доступ к очередям в коде
Для доступа к очередям в проектах облачных служб Visual Studio необходимо включить следующие элементы во все файлы исходного кода C#, которые обращаются к хранилищу очередей Azure.
Убедитесь, что объявления пространств имен в верхней части файла C# содержат указанные ниже выражения using .
using Microsoft.Framework.Configuration; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Queue;
Получите объект CloudStorageAccount , представляющий данные учетной записи хранения. Используйте следующий код, чтобы получить строку подключения и сведения об учетной записи хранения из конфигурации службы Azure.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
Используйте объект CloudQueueClient для ссылки на объекты очереди в вашей учетной записи хранения.
// Create the queue client. CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
Получите объект 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();
Чтение и удаление сообщения в очереди
Ваш код может удалить сообщение из очереди в два этапа.
- Вызовите метод GetMessage , чтобы получить следующее сообщение в очереди. Сообщение, возвращаемое методом GetMessage , становится невидимым для другого кода, считывающего сообщения из этой очереди. По умолчанию это сообщение остается невидимым в течение 30 секунд.
- Чтобы завершить удаление сообщения из очереди, вызовите метод 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. Дополнительные сведения о более сложных задачах по использованию хранилища можно найти по следующим ссылкам.
- Полную информацию о доступных API см. в справочной документации по службе очередей в справочнике по клиентской библиотеке хранилища Azure для .NET.
- Узнайте больше об использовании хранилища очередей в разделе Приступая к работе с хранилищем очередей Azure с помощью .NET
- Чтобы узнать, как упростить код, предназначенный для работы со службой хранилища Azure, ознакомьтесь с разделом Информация о пакете SDK веб-заданий
- Просмотрите дополнительные руководства, чтобы изучить дополнительные возможности хранения данных в Azure.
- Для работы с таблицами службы хранилища Azure см. статью Приступая к работе с хранилищем таблиц Azure с помощью .NET.
- Для работы с большими двоичными объектами службы хранилища Azure см. статью Приступая к работе с хранилищем BLOB-объектов Azure с помощью .NET.
- Для хранения реляционных данных см. статью Подключение к базе данных SQL с помощью .NET (C#).