Примеры кода хранилища очередей Azure с помощью клиентских библиотек Python версии 2
В этой статье показаны примеры кода, использующие клиентская библиотека хранилища очередей Azure для Python версии 2.
31 марта 2023 г. мы отставили от поддержки библиотек пакета SDK Azure, которые не соответствуют текущим рекомендациям по пакету SDK Azure. Новые библиотеки azure SDK регулярно обновляются для обеспечения согласованного взаимодействия и укрепления системы безопасности. Рекомендуется перейти на новые библиотеки пакета SDK Azure, чтобы воспользоваться новыми возможностями и критически важными обновлениями безопасности.
Хотя старые библиотеки по-прежнему могут использоваться после 31 марта 2023 г., они больше не будут получать официальную поддержку и обновления от Корпорации Майкрософт. Дополнительные сведения см. в объявлении о выходе на пенсию в службу поддержки.
Примеры кода, использующие последнюю версию клиентской библиотеки 12.x, см . в кратком руководстве: клиентская библиотека хранилища очередей Azure для Python.
Создать очередь
Затем добавьте следующие import
директивы:
from azure.storage.queue import (
QueueService,
QueueMessageFormat
)
Следующий код создает объект QueueService
, используя строку подключения к хранилищу:
# 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
queue_name = "queue-" + str(uuid.uuid4())
# Create a QueueService object which will
# be used to create and manipulate the queue
print("Creating queue: " + queue_name)
queue_service = QueueService(connection_string=connect_str)
# Create the queue
queue_service.create_queue(queue_name)
Сообщения очереди Azure хранятся в виде текста. Если вы хотите хранить двоичные данные, настройте функции кодирования и декодирования Base64 перед помещением сообщения в очередь.
Настройте функции кодирования и декодирования Base64 в объекте хранилища очередей:
# Setup Base64 encoding and decoding functions
queue_service.encode_function = QueueMessageFormat.binary_base64encode
queue_service.decode_function = QueueMessageFormat.binary_base64decode
Вставка сообщения в очередь
Чтобы вставить сообщение в очередь, используйте метод put_message
. Новое сообщение будет создано и добавлено в очередь.
message = u"Hello, World"
print("Adding message: " + message)
queue_service.put_message(queue_name, message)
Просмотр сообщений
Вы можете просматривать сообщения, не удаляя их из очереди, с помощью метода peek_messages
. По умолчанию этот метод просматривает отдельное сообщение.
messages = queue_service.peek_messages(queue_name)
for peeked_message in messages:
print("Peeked message: " + peeked_message.content)
Изменение содержимого сообщения в очереди
В следующем коде для обновления сообщения используется метод update_message
. Время ожидания видимости равно 0. Это означает, что сообщение появится немедленно, и содержимое обновится.
messages = queue_service.get_messages(queue_name)
for message in messages:
queue_service.update_message(
queue_name, message.id, message.pop_receipt, 0, u"Hello, World Again")
Получение длины очереди
Метод get_queue_metadata
возвращает свойства очереди, включая approximate_message_count
.
metadata = queue_service.get_queue_metadata(queue_name)
count = metadata.approximate_message_count
print("Message count: " + str(count))
Результат является приблизительным, поскольку сообщения могут быть добавлены или удалены после того, как служба ответит на ваш запрос.
Вывод сообщений из очереди
При вызове get_messages по умолчанию вы получаете следующее сообщение в очереди. Сообщение, возвращаемое методом get_messages
, становится невидимым для другого кода, считывающего сообщения из этой очереди. По умолчанию это сообщение остается невидимым в течение 30 секунд. Чтобы завершить удаление сообщения из очереди, необходимо также вызвать метод delete_message.
messages = queue_service.get_messages(queue_name)
for message in messages:
print("Deleting message: " + message.content)
queue_service.delete_message(queue_name, message.id, message.pop_receipt)
Способ извлечения сообщения из очереди можно настроить двумя способами. Во-первых, можно получить пакет сообщений (до 32 сообщений). Во-вторых, можно задать более длительное или короткое время ожидания видимости, чтобы предоставить коду больше или меньше времени на полную обработку каждого сообщения.
В следующем примере кода метод get_messages
используется для получения 16 сообщений за один вызов. Затем он обрабатывает каждое сообщение с помощью цикла for
. Он также задает время ожидания невидимости 5 минут для каждого сообщения.
messages = queue_service.get_messages(queue_name, num_messages=16, visibility_timeout=5*60)
for message in messages:
print("Deleting message: " + message.content)
queue_service.delete_message(queue_name, message.id, message.pop_receipt)
Удаление очереди
Чтобы удалить очередь и все содержащиеся в ней сообщения, вызовите метод delete_queue
.
print("Deleting queue: " + queue_name)
queue_service.delete_queue(queue_name)