Примеры кода хранилища очередей Azure с использованием клиентских библиотек Python версии 2

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

31 марта 2023 г. прекращена поддержка библиотек пакета SDK Azure, которые не соответствуют текущим рекомендациям по пакету AZURE SDK. Новые библиотеки azure SDK регулярно обновляются для обеспечения согласованного взаимодействия и повышения уровня безопасности. Рекомендуется перейти на новые библиотеки azure SDK, чтобы воспользоваться новыми возможностями и критическими обновлениями для системы безопасности.

Хотя старые библиотеки по-прежнему могут использоваться после 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)