Краткое руководство. Клиентская библиотека хранилища очередей Azure для .NET

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

Справочная документация по API | исходный код библиотеки | пакет (NuGet) | примеры

Использование клиентской библиотеки хранилища очередей Azure для .NET:

  • Создать очередь
  • Добавление сообщений в очередь
  • Просмотр сообщений из очереди
  • Обновление сообщений в очереди
  • Получение длины очереди
  • Получение сообщений из очереди
  • Удаление сообщений из очереди
  • Удаление очереди

Необходимые компоненты

Установка

В этом разделе описывается подготовка проекта для работы с клиентской библиотекой хранилища очередей Azure для .NET.

Создание проекта

Создание приложения .NET с именем QueuesQuickstart.

  1. В окне консоли (cmd, PowerShell или Bash) выполните команду dotnet new, чтобы создать консольное приложение с именем QueuesQuickstart. Эта команда создает простой проект C# hello world с одним исходным файлом с именем Program.cs.

    dotnet new console -n QueuesQuickstart
    
  2. Перейдите в только что созданный каталог QueuesQuickstart.

    cd QueuesQuickstart
    

Установка пакетов

Оставаясь в каталоге приложения, установите пакет клиентской библиотеки Хранилища очередей Azure для .NET с помощью команды dotnet add package.

dotnet add package Azure.Storage.Queues

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

dotnet add package Azure.Identity

Настройка платформы приложения

  1. Открытие проекта в выбранном редакторе
  2. Откройте файл Program.cs
  3. Обновите существующий код, чтобы он соответствовал следующему:
using Azure;
using Azure.Identity;
using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;
using System;
using System.Threading.Tasks;

Console.WriteLine("Azure Queue Storage client library - .NET quickstart sample");

// Quickstart code goes here

Аутентификация в Azure

Запросы приложений к большинству служб Azure должны быть авторизованы. DefaultAzureCredential Использование класса, предоставленного клиентской библиотекой удостоверений Azure, является рекомендуемым подходом для реализации бессерверных подключений к службам Azure в коде.

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

DefaultAzureCredential — это класс, предоставляемый клиентской библиотекой удостоверений Azure для .NET. Дополнительные сведения DefaultAzureCredentialсм. в обзоре DefaultAzureCredential. DefaultAzureCredential поддерживает несколько способов проверки подлинности и определяет, какой из них следует использовать в среде выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды.

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

При разработке локально убедитесь, что учетная запись пользователя, которая обращается к данным очереди, имеет правильные разрешения. Вам потребуется участник данных очереди хранилища для чтения и записи данных очереди. Чтобы назначить себе эту роль, вам потребуется назначить роль администратора доступа пользователей или другую роль, включающую действие Microsoft.Authorization/roleAssignments/write . Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных областях назначения ролей можно узнать на странице обзора области.

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

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

Внимание

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

  1. На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.

  2. На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.

  3. На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.

  4. Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.

Снимок экрана, на котором продемонстрировано назначение роли.

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

  2. В разделе Назначение доступа для выберите Пользователь, группа или субъект-служба и + Выбрать членов.

  3. В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш user@domain адрес электронной почты), а затем выберите в нижней части диалогового окна.

  4. Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.

Объектная модель

Служба Хранилище очередей Azure предназначена для хранения большого количества произвольных сообщений. Максимальный размер сообщения в очереди составляет 64 КБ. Очередь может содержать миллионы сообщений вплоть до лимита всей емкости учетной записи хранения. Очереди обычно используются для создания списка невыполненных заданий для асинхронной обработки. В Хранилище очередей предлагается три типа ресурсов:

  • Учетная запись хранения. Доступ к службе хранилища Azure всегда осуществляется с помощью учетной записи хранения. Дополнительные сведения об учетных записях хранения см. в обзоре учетной записи хранения.
  • Очередь. Очередь содержит набор сообщений. Все сообщения должны находиться в очереди. Обратите внимание: имя очереди должно содержать только строчные символы. Дополнительные сведения см. в статье о присвоении имен очередям и метаданным.
  • Сообщение. Сообщение в любом формате размером до 64 КБ. Сообщение может оставаться в очереди не более 7 дней. Начиная с версии 2017-07-29, максимальный срок жизни может быть задан любым положительным числом или значением -1, свидетельствующим о том, что срок жизни сообщения неограничен. Если этот параметр не указан, срок жизни по умолчанию составляет семь дней.

На следующей схеме показана связь между этими ресурсами.

Схема архитектуры Хранилища очередей

Используйте следующие классы .NET для взаимодействия с этими ресурсами:

  • QueueServiceClient: QueueServiceClient позволяет управлять всеми очередями в учетной записи хранения.
  • QueueClient: класс QueueClient позволяет управлять отдельной очередью и сообщениями в ней.
  • QueueMessage: класс QueueMessage представляет отдельные объекты, которые возвращаются при вызове ReceiveMessages для очереди.

Примеры кода

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

Авторизация доступа и создание клиентского объекта

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

Войдите в Azure с помощью Azure CLI, выполнив следующую команду:

az login

После проверки подлинности можно создать и авторизовать QueueClient объект, используя DefaultAzureCredential для доступа к данным очереди в учетной записи хранения. DefaultAzureCredential автоматически обнаруживает и использует учетную запись, вошедшего в систему на предыдущем шаге.

Чтобы авторизовать использование DefaultAzureCredential, убедитесь, что вы добавили пакет Azure.Identity , как описано в разделе "Установка пакетов". Кроме того, обязательно добавьте директиву using для Azure.Identity пространства имен в файле Program.cs :

using Azure.Identity;

Затем определите имя очереди и создайте экземпляр QueueClient класса, используя DefaultAzureCredential для авторизации. Этот клиентский объект используется для создания и взаимодействия с ресурсом очереди в учетной записи хранения.

Внимание

Имя очереди может содержать только строчные буквы, цифры и дефисы и должно начинаться с буквы или цифры. Перед каждым дефисом должен быть знак без дефиса. Количество символов в имени должно быть от 3 до 63. Дополнительные сведения см. в статье Именование очередей и метаданных.

Добавьте следующий код в конец файла Program.cs . Обязательно замените <storage-account-name> значение заполнителя:

// Create a unique name for the queue
// TODO: Replace the <storage-account-name> placeholder 
string queueName = "quickstartqueues-" + Guid.NewGuid().ToString();
string storageAccountName = "<storage-account-name>";

// Instantiate a QueueClient to create and interact with the queue
QueueClient queueClient = new QueueClient(
    new Uri($"https://{storageAccountName}.queue.core.windows.net/{queueName}"),
    new DefaultAzureCredential());

Примечание.

Сообщения, отправленные QueueClient с помощью класса, должны находиться в формате, который может быть включен в XML-запрос с кодировкой UTF-8. При необходимости параметр MessageEncoding можно задать для Base64 для обработки сообщений, не соответствующих требованиям.

Создать очередь

QueueClient С помощью объекта вызовите CreateAsync метод для создания очереди в учетной записи хранения.

Добавьте этот код в конец метода Program.cs :

Console.WriteLine($"Creating queue: {queueName}");

// Create the queue
await queueClient.CreateAsync();

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

Приведенный ниже фрагмент кода асинхронно добавляет сообщения в очередь, вызывая метод SendMessageAsync. Он также сохраняет SendReceipt, возвращенный вызовом SendMessageAsync. Это подтверждение используется для обновления сообщения далее в коде программы.

Добавьте этот код в конец файла Program.cs :

Console.WriteLine("\nAdding messages to the queue...");

// Send several messages to the queue
await queueClient.SendMessageAsync("First message");
await queueClient.SendMessageAsync("Second message");

// Save the receipt so we can update this message later
SendReceipt receipt = await queueClient.SendMessageAsync("Third message");

Просмотр сообщений из очереди

Чтобы просмотреть сообщения в очереди, вызовите метод PeekMessagesAsync. Этот метод извлекает одно или несколько сообщений из начала очереди, не изменяя видимость этих сообщений.

Добавьте этот код в конец файла Program.cs :

Console.WriteLine("\nPeek at the messages in the queue...");

// Peek at messages in the queue
PeekedMessage[] peekedMessages = await queueClient.PeekMessagesAsync(maxMessages: 10);

foreach (PeekedMessage peekedMessage in peekedMessages)
{
    // Display the message
    Console.WriteLine($"Message: {peekedMessage.MessageText}");
}

Обновление сообщений в очереди

Чтобы обновить содержимое сообщения, вызовите метод UpdateMessageAsync. Этот метод позволяет изменить время видимости сообщения и его содержимое. Содержимое сообщение должно иметь формат строки в кодировке UTF-8 длиной не более 64 КБ. Вместе с новым содержимым сообщения передайте значения из SendReceipt, сохраненного ранее в коде программы. Значения SendReceipt указывают, какое сообщение следует обновить.

Console.WriteLine("\nUpdating the third message in the queue...");

// Update a message using the saved receipt from sending the message
await queueClient.UpdateMessageAsync(receipt.MessageId, receipt.PopReceipt, "Third message has been updated");

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

Вы можете узнать приблизительное количество сообщений в очереди. Метод GetProperties возвращает свойства очереди, включая число сообщений. Свойство ApproximateMessagesCount указывает приблизительное количество сообщений в очереди. Это число не ниже фактического количества сообщений в очереди, но может быть выше.

Добавьте этот код в конец файла Program.cs :

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}");

Получение сообщений из очереди

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

Добавьте этот код в конец файла Program.cs :

Console.WriteLine("\nReceiving messages from the queue...");

// Get messages from the queue
QueueMessage[] messages = await queueClient.ReceiveMessagesAsync(maxMessages: 10);

При необходимости можно указать значение, maxMessagesкоторое является числом сообщений, извлекаемых из очереди. Значение по умолчанию — 1 сообщение, а максимальное — 32 сообщения. Можно также указать значение, visibilityTimeoutкоторое скрывает сообщения от других операций за период ожидания. Значение по умолчанию — 30 секунд.

Удаление сообщений из очереди

Удалите сообщения из очереди после их обработки. В нашем примере обработка сводится к выводу сообщения в консоль.

Перед обработкой и удалением сообщений приложение ожидает ввода от пользователя, вызывая метод Console.ReadLine. Перед удалением ресурсов убедитесь на портале Azure, что они были правильно созданы. Все сообщения, которые явно не удалены, в конечном итоге становятся видимыми в очереди еще раз, чтобы еще один шанс обработать их.

Добавьте этот код в конец файла Program.cs :

Console.WriteLine("\nPress Enter key to 'process' messages and delete them from the queue...");
Console.ReadLine();

// Process and delete messages from the queue
foreach (QueueMessage message in messages)
{
    // "Process" the message
    Console.WriteLine($"Message: {message.MessageText}");

    // Let the service know we're finished with
    // the message and it can be safely deleted.
    await queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt);
}

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

Следующий код очищает созданные приложением ресурсы, удаляя очередь с помощью метода DeleteAsync.

Добавьте этот код в конец файла Program.cs :

Console.WriteLine("\nPress Enter key to delete the queue...");
Console.ReadLine();

// Clean up
Console.WriteLine($"Deleting queue: {queueClient.Name}");
await queueClient.DeleteAsync();

Console.WriteLine("Done");

Выполнение кода

Это приложение создает три сообщения и добавляет их в очередь Azure. Затем код получает список сообщений, извлекает и удаляет их, и наконец удаляет саму очередь.

В окне консоли перейдите к каталогу приложения, выполните его сборку и запустите его.

dotnet build
dotnet run

Вы должны увидеть выходные данные приложения, как показано ниже.

Azure Queue Storage client library - .NET quickstart sample

Creating queue: quickstartqueues-5c72da2c-30cc-4f09-b05c-a95d9da52af2

Adding messages to the queue...

Peek at the messages in the queue...
Message: First message
Message: Second message
Message: Third message

Updating the third message in the queue...

Receiving messages from the queue...

Press Enter key to 'process' messages and delete them from the queue...

Message: First message
Message: Second message
Message: Third message has been updated

Press Enter key to delete the queue...

Deleting queue: quickstartqueues-5c72da2c-30cc-4f09-b05c-a95d9da52af2
Done

Когда приложение приостановится перед получением сообщений, проверьте учетную запись хранения на портале Azure. Убедитесь, что сообщения находятся в очереди.

Нажмите клавишу Enter, чтобы получить и удалить сообщения. При появлении запроса снова нажмите клавишу Enter, чтобы удалить очередь и завершить демонстрацию.

Следующие шаги

Из этого краткого руководства вы узнали, как создавать очередь и добавлять в нее сообщения из асинхронного кода на .NET. Затем вы изучили процессы вставки, просмотра, получения и удаления сообщений. Наконец, вы узнали, как удалить очередь сообщений.

Руководства, примеры, краткие руководства и другую документацию можно найти здесь: