Использование Хранилища очередей Azure из Python
Обзор
В этой статье демонстрируются распространенные сценарии использования службы "Хранилище очередей Azure". Рассматриваемые сценарии включают вставку, просмотр, получение и удаление сообщений очереди. Также рассматривается код для создания и удаления очередей.
Примеры в этой статье написаны на Python, и в них используется клиентская библиотека Хранилища очередей Azure для Python. Дополнительные сведения об очередях см. в разделе Дальнейшие действия.
Что такое хранилище очередей?
Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получить доступ практически из любой точки мира с помощью вызовов с проверкой подлинности по протоколам HTTP или HTTPS. Одно сообщение очереди может быть размером до 64 КБ, а очередь может содержать миллионы сообщений до общего ограничения емкости учетной записи хранения. Хранилище очередей часто используется для создания списка невыполненных заданий для асинхронной обработки.
Основные понятия службы очередей
Служба очередей Azure содержит следующие компоненты:
Учетная запись хранения. Весь доступ к хранилищу Azure осуществляется с помощью учетной записи хранения. См. сведения об учетных записях хранения.
Очередь. Очередь содержит набор сообщений. Все сообщения должны находиться в очереди. Обратите внимание: имя очереди должно содержать только строчные символы. Дополнительные сведения см. в статье о присвоении имен очередям и метаданным.
Сообщение. Сообщение в любом формате размером до 64 КБ. Сообщение может оставаться в очереди не более 7 дней. Начиная с версии 2017-07-29, максимальный срок жизни может быть задан любым положительным числом или значением -1, свидетельствующим о том, что срок жизни сообщения неограничен. Если этот параметр не указан, срок жизни по умолчанию составляет семь дней.
Формат URL-адреса: обращаться к очередям можно с помощью URL-адреса следующего вида: http://
<storage account>
.queue.core.windows.net/<queue>
Следующий URL-адрес позволяет обратиться к очереди на схеме:
http://myaccount.queue.core.windows.net/incoming-orders
Создание учетной записи хранения Azure
Самый простой способ создать первую учетную запись хранения Azure — воспользоваться порталом Azure. Дополнительную информацию см. в статье Об учетных записях хранения Azure.
Кроме того, создать учетную запись хранения Azure можно с помощью Azure PowerShell, Azure CLI или поставщика ресурсов службы хранилища Azure для .NET.
Если вы не хотите сейчас создавать учетную запись хранения в Azure, код можно запустить и протестировать в локальной среде с помощью эмулятора хранилища Azurite. Дополнительные сведения см. в статье Использование эмулятора Azurite для разработки и тестирования службы хранилища Azure.
Загрузка и установка пакета SDK службы хранилища Azure для Python
Для пакета SDK службы хранилища Microsoft Azure для Python требуется Python версии 2.7, 3.3 или более поздней.
Установка с помощью PyPI
Для установки с помощью индекса пакетов Python (PyPI) введите:
pip install azure-storage-queue
Примечание
Если вы выполняете обновление с пакета SDK службы хранилища Microsoft Azure для Python версии 0.36 или более ранней, удалите старый SDK с помощью pip uninstall azure-storage
перед установкой нового пакета.
Альтернативные методы установки см. в описании Azure SDK для Python.
Копирование учетных данных с портала Azure
Когда пример приложения выполняет запрос к службе хранилища Azure, он должен быть авторизован. Для авторизации запроса добавьте в приложение учетные данные учетной записи хранения в виде строки подключения. Чтобы просмотреть учетные данные учетной записи хранения, выполните следующие шаги:
Войдите на портал Azure.
Перейдите к учетной записи хранения.
На панели меню учетной записи хранения в разделе Безопасность и сети выберите Ключи доступа. На этой странице вы увидите ключи доступа к учетной записи и полную строку подключения для каждого ключа.
В области Ключи доступа выберите команду Показать ключи.
В разделе key1 выберите значение Строка подключения. Нажмите значок Копировать в буфер обмена, чтобы скопировать строку подключения. В следующем разделе вы добавите значение строки подключения в переменную среды.
Настройка строки подключения хранилища
После копирования строки подключения запишите ее в переменной среды на локальном компьютере, где выполняется приложение. Чтобы задать переменную среды, откройте окно консоли и следуйте инструкциям для используемой операционной системы. Замените <yourconnectionstring>
фактической строкой подключения.
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
После добавления переменной среды в Windows вам необходимо запустить новый экземпляр командного окна.
Перезапуск программ
После добавления переменной среды перезапустите все запущенные программы, которым может понадобиться считать переменную среды. Например, перезапустите среду разработки или редактор, прежде чем продолжить.
Настройка приложения для доступа к хранилищу очередей
Объект QueueClient
позволяет работать с очередью. Добавьте следующий код в верхнюю часть любого файла Python, в котором вы хотите получить программный доступ к очереди Azure:
from azure.storage.queue import (
QueueClient,
BinaryBase64EncodePolicy,
BinaryBase64DecodePolicy
)
import os, uuid
Пакет os
обеспечивает поддержку для получения переменной среды. Пакет uuid
обеспечивает поддержку для генерирования уникального идентификатора для имени очереди.
Создание очереди
Строка подключения извлекается из заданной ранее переменной среды AZURE_STORAGE_CONNECTION_STRING
.
Следующий код создает объект QueueClient
, используя строку подключения к хранилищу:
# Retrieve the connection string from an environment
# variable named AZURE_STORAGE_CONNECTION_STRING
connect_str = os.getenv("AZURE_STORAGE_CONNECTION_STRING")
# Create a unique name for the queue
q_name = "queue-" + str(uuid.uuid4())
# Instantiate a QueueClient object which will
# be used to create and manipulate the queue
print("Creating queue: " + q_name)
queue_client = QueueClient.from_connection_string(connect_str, q_name)
# Create the queue
queue_client.create_queue()
Сообщения очереди Azure хранятся в виде текста. Если вы хотите хранить двоичные данные, настройте функции кодирования и декодирования Base64 перед помещением сообщения в очередь.
Настройте функции кодирования и декодирования Base64 при создании клиентского объекта.
# Setup Base64 encoding and decoding functions
base64_queue_client = QueueClient.from_connection_string(
conn_str=connect_str, queue_name=q_name,
message_encode_policy = BinaryBase64EncodePolicy(),
message_decode_policy = BinaryBase64DecodePolicy()
)
Вставка сообщения в очередь
Чтобы вставить сообщение в очередь, используйте метод send_message
.
message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)
Просмотр сообщений
Вы можете просматривать сообщения, не удаляя их из очереди, с помощью метода peek_messages
. По умолчанию этот метод просматривает отдельное сообщение.
# Peek at the first message
messages = queue_client.peek_messages()
for peeked_message in messages:
print("Peeked message: " + peeked_message.content)
Изменение содержимого сообщения в очереди
Вы можете изменить содержимое сообщения непосредственно в очереди. Если сообщение представляет собой задачу, можно использовать эту функцию для обновления ее состояния.
В следующем коде для обновления сообщения используется метод update_message
. Время ожидания видимости равно 0. Это означает, что сообщение появится немедленно, и содержимое обновится.
messages = queue_client.receive_messages()
list_result = next(messages)
message = queue_client.update_message(
list_result.id, list_result.pop_receipt,
visibility_timeout=0, content=u'Hello World Again')
print("Updated message to: " + message.content)
Получение длины очереди
Вы можете узнать приблизительное количество сообщений в очереди.
Метод get_queue_properties возвращает свойства очереди, включая approximate_message_count
.
properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))
Результат является приблизительным, поскольку сообщения могут быть добавлены или удалены после того, как служба ответит на ваш запрос.
Вывод сообщений из очереди
Удалите сообщение из очереди в два шага. Если код не может обработать сообщение, такой двухэтапный процесс гарантирует, что вы получите то же сообщение и сможете повторить попытку. Вызовите delete_message
после успешной обработки сообщения.
При вызове receive_messages по умолчанию вы получаете следующее сообщение в очереди. Сообщение, возвращаемое методом receive_messages
, становится невидимым для другого кода, считывающего сообщения из этой очереди. По умолчанию это сообщение остается невидимым в течение 30 секунд. Чтобы завершить удаление сообщения из очереди, необходимо также вызвать метод delete_message.
messages = queue_client.receive_messages()
for message in messages:
print("Dequeueing message: " + message.content)
queue_client.delete_message(message.id, message.pop_receipt)
Способ извлечения сообщения из очереди можно настроить двумя способами. Во-первых, можно получить пакет сообщений (до 32 сообщений). Во-вторых, можно задать более длительное или короткое время ожидания видимости, чтобы предоставить коду больше или меньше времени на полную обработку каждого сообщения.
В следующем примере кода метод receive_messages
используется для получения сообщений пакетами. После этого он обрабатывает каждое сообщение в каждом пакете с помощью вложенного цикла for
. Он также задает время ожидания невидимости 5 минут для каждого сообщения.
messages = queue_client.receive_messages(messages_per_page=5, visibility_timeout=5*60)
for msg_batch in messages.by_page():
for msg in msg_batch:
print("Batch dequeue message: " + msg.content)
queue_client.delete_message(msg)
Удаление очереди
Чтобы удалить очередь и все содержащиеся в ней сообщения, вызовите метод delete_queue
.
print("Deleting queue: " + queue_client.queue_name)
queue_client.delete_queue()
Совет
Пробное использование обозревателя хранилищ Microsoft Azure
Обозреватель хранилищ Microsoft Azure — это бесплатное автономное приложение от корпорации Майкрософт, позволяющее визуализировать данные из службы хранилища Azure на платформе Windows, macOS и Linux.
Дальнейшие действия
Теперь, когда вы изучили основы Хранилища очередей Azure, перейдите по этим ссылкам, чтобы узнать больше.
- Справочник по API Python для Хранилища очередей Azure
- Центр по разработке на Python
- Справочник по API-интерфейсу REST служб хранилища
Связанные примеры кода с использованием устаревших пакетов SDK для Python версии 2 см. в разделе Примеры кода с использованием Python версии 2.