Procedimiento para usar Azure Queue Storage desde Python
Información general
En este artículo se muestran escenarios comunes con el servicio Azure Queue Storage. Entre los escenarios descritos se incluyen la inserción, inspección, obtención y eliminación de mensajes de la cola. También se incluye código para crear y eliminar colas.
Los ejemplos de este artículo están escritos en Python y usan la biblioteca cliente de Azure Queue Storage para Python. Para obtener más información sobre las colas, consulte la sección Pasos siguientes .
¿Qué es Queue Storage?
El almacenamiento en cola de Azure es un servicio para almacenar grandes cantidades de mensajes a los que puede obtenerse acceso desde cualquier lugar del mundo a través de llamadas autenticadas con HTTP o HTTPS. Un único mensaje en cola puede tener un tamaño de hasta 64 KB y una cola puede contener millones de mensajes, hasta el límite de capacidad total de una cuenta de almacenamiento. Queue Storage se usa normalmente para crear un trabajo pendiente del trabajo que se va a procesar de forma asincrónica.
Conceptos del servicio Queue
Azure Queue service contiene los siguientes componentes:
Cuenta de almacenamiento: Todo el acceso a Azure Storage se realiza a través de una cuenta de almacenamiento. Para más información sobre las cuentas de almacenamiento, consulte Introducción a las cuentas de Storage.
Cola: una cola contiene un conjunto de mensajes. Todos los mensajes deben encontrarse en una cola. Tenga en cuenta que el nombre de la cola debe ir en minúsculas. Para más información, consulte Asignar nombres a colas y metadatos.
Mensaje: un mensaje, en cualquier formato, de hasta 64 KB. El tiempo máximo que un mensaje puede permanecer en la cola es de 7 días. A partir de la versión del 2017-07-29, inclusive, el tiempo de vida máximo puede ser cualquier número positivo o -1, lo que indica que el mensaje no expira. Si se omite este parámetro, el tiempo de vida predeterminado es siete días.
Formato de URL: las colas son direccionables mediante el siguiente formato de dirección URL: http://
<storage account>
.queue.core.windows.net/<queue>
La siguiente dirección URL dirige a una cola del diagrama:
http://myaccount.queue.core.windows.net/incoming-orders
Creación de una cuenta de Azure Storage
La forma más fácil de crear la primera cuenta de Azure Storage es a través de Azure Portal. Para obtener más información, consulte Crear una cuenta de almacenamiento.
Puede crear también una cuenta de Azure Storage mediante Azure PowerShell, la CLI de Azure o el proveedor de recursos de Azure Storage para .NET.
Si no quiere crear una cuenta de almacenamiento en Azure en este momento, también puede utilizar el emulador de almacenamiento Azurite para ejecutar y probar el código en un entorno local. Para más información, consulte Uso del emulador de Azurite para desarrollo y pruebas locales de Azure Storage.
Descarga e instalación del SDK de Azure Storage para Python
El SDK de Azure Storage para Python necesita Python 2.7, 3.3 o una versión posterior.
Instalación mediante PyPI
Para realizar la instalación mediante el índice de paquetes de Python (PyPI), escriba:
pip install azure-storage-queue
Nota:
Si va a actualizar desde el SDK de Azure Storage para Python 0.36 o una versión anterior, desinstale el SDK anterior mediante pip uninstall azure-storage
antes de instalar el paquete más reciente.
Para métodos de instalación alternativos, consulte SDK de Azure para Python.
Copia de las credenciales desde Azure Portal
Cuando la aplicación de ejemplo realiza una solicitud a Azure Storage, debe estar autorizada. Para autorizar una solicitud, agregue a la aplicación las credenciales de la cuenta de almacenamiento en forma de cadena de conexión. Para ver las credenciales de la cuenta de almacenamiento, siga estos pasos:
Inicie sesión en Azure Portal.
Busque su cuenta de almacenamiento.
En el panel del menú de la cuenta de almacenamiento, en Seguridad y redes, seleccione Claves de acceso. Aquí puede ver las claves de acceso de la cuenta, así como la cadena de conexión completa de cada clave.
En el panel Claves acceso, seleccione Mostrar claves.
En la sección key1, busque el valor de Cadena de conexión. Seleccione el icono Copiar al portapapeles para copiar la cadena de conexión. En la siguiente sección, agregará el valor de la cadena de conexión a una variable de entorno.
Configuración de la cadena de conexión de almacenamiento.
Una vez que haya copiado la cadena de conexión, escríbala en una variable de entorno nueva en la máquina local que ejecuta la aplicación. Para establecer la variable de entorno, abra una ventana de consola y siga las instrucciones de su sistema operativo. Reemplace <yourconnectionstring>
por la cadena de conexión real.
setx AZURE_STORAGE_CONNECTION_STRING "<yourconnectionstring>"
Después de agregar la variable de entorno en Windows, debe iniciar una nueva instancia de la ventana de comandos.
Reiniciar programas
Después de agregar la variable de entorno, reinicie todos los programas en ejecución que necesiten leer esta variable. Por ejemplo, reinicie el entorno de desarrollo o el editor antes de continuar.
Configuración de la aplicación para obtener acceso a Queue Storage
El objeto QueueClient
permite trabajar con una cola. Agregue el siguiente código cerca de la parte superior de cualquier archivo Python en el que desee obtener acceso a una cola de Azure mediante programación:
from azure.storage.queue import (
QueueClient,
BinaryBase64EncodePolicy,
BinaryBase64DecodePolicy
)
import os, uuid
El paquete os
proporciona compatibilidad para recuperar una variable de entorno. El paquete uuid
proporciona compatibilidad para generar un identificador único para un nombre de cola.
Creación de una cola
La cadena de conexión se recupera de la variable de entorno AZURE_STORAGE_CONNECTION_STRING
establecida anteriormente.
El código siguiente crea un objeto QueueClient
con la cadena de conexión de almacenamiento.
# 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()
Los mensajes de la cola de Azure se almacenan como texto. Si quiere almacenar datos binarios, configure las funciones de codificación y descodificación de Base64 antes de colocar un mensaje en la cola.
Configure las funciones de codificación y descodificación de Base64 durante la creación del objeto de cliente.
# 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()
)
un mensaje en una cola
Para insertar un mensaje en una cola, use el método send_message
.
message = u"Hello World"
print("Adding message: " + message)
queue_client.send_message(message)
Inspección de mensajes
Puede ver el código sin salir de los mensajes sin tener que quitarlos de la cola, mediante una llamada al método peek_messages
. De forma predeterminada, este método ve el código sin salir en un único mensaje.
# Peek at the first message
messages = queue_client.peek_messages()
for peeked_message in messages:
print("Peeked message: " + peeked_message.content)
contenido de un mensaje en cola
Puede cambiar el contenido de un mensaje local en la cola. Si el mensaje representa una tarea, puede usar esta característica para actualizar el estado de la tarea.
En el código siguiente se usa el método update_message
para actualizar un mensaje. El tiempo de espera de visibilidad se establece en 0, lo que significa que el mensaje aparece inmediatamente y se actualiza el contenido.
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)
la longitud de la cola
Puede obtener una estimación del número de mensajes existentes en una cola.
El método get_queue_properties devuelve propiedades de cola, incluida approximate_message_count
.
properties = queue_client.get_queue_properties()
count = properties.approximate_message_count
print("Message count: " + str(count))
El resultado solo es aproximado, ya que se pueden agregar o borrar mensajes después de que el servicio responda la solicitud.
Retirar mensajes de la cola
Quite un mensaje de una cola en dos pasos. Si el código no puede procesar un mensaje, este proceso de dos pasos garantiza que pueda obtener el mismo mensaje e intentarlo de nuevo. Llame a delete_message
después de que el mensaje se haya procesado correctamente.
Si llama a receive_messages, obtiene, de forma predeterminada, el siguiente mensaje de una cola. Un mensaje devuelto por receive_messages
se hace invisible a cualquier otro código de lectura de mensajes de esta cola. De forma predeterminada, este mensaje permanece invisible durante 30 segundos. Para terminar quitando el mensaje de la cola, también debe llamar a 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)
Hay dos formas de personalizar la recuperación de mensajes de una cola. En primer lugar, puede obtener un lote de mensajes (hasta 32). En segundo lugar, puede establecer un tiempo de espera de la invisibilidad más largo o más corto para que el código disponga de más o menos tiempo para procesar cada mensaje.
En el ejemplo de código siguiente se usa el método receive_messages
para obtener mensajes en lotes. A continuación, procesa cada mensaje dentro de cada lote mediante un bucle for
anidado. También establece el tiempo de espera de la invisibilidad en cinco minutos para cada mensaje.
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)
Eliminación de una cola
Para eliminar una cola y todos los mensajes que contiene, llame al método delete_queue
.
print("Deleting queue: " + queue_client.queue_name)
queue_client.delete_queue()
Sugerencia
Probar el Explorador de Microsoft Azure Storage
El Explorador de Microsoft Azure Storage es una aplicación independiente y gratuita de Microsoft que permite trabajar visualmente con los datos de Azure Storage en Windows, macOS y Linux.
Pasos siguientes
Ahora que ya conoce los aspectos básicos de Queue Storage, siga estos vínculos para obtener más información.
- Referencia de la API de Python de Azure Queue Storage
- Centro para desarrolladores de Python
- Referencia de API REST de Azure Storage
Para ver ejemplos de código relacionados que usan los SDK de la versión 2 en desuso de Python, consulte Ejemplos de código que usan la versión 2 de Python.