Поделиться через


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

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

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

Хотя старые библиотеки по-прежнему могут использоваться после 31 марта 2023 г., они больше не будут получать официальную поддержку и обновления от Корпорации Майкрософт. Дополнительные сведения см. в объявлении о прекращении поддержки.

Примеры кода, использующие версию 12.x последней клиентской библиотеки, см. в разделе Краткое руководство: клиентская библиотека Azure Queue Storage для 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)