Compartir a través de


Uso de Azure Queue Storage desde Python

Información general

En este artículo se muestran escenarios comunes mediante el servicio Azure Queue Storage. Entre los escenarios descritos se incluyen insertar, ver, obtener y eliminar mensajes de cola. También se trata el código para crear y eliminar colas.

Los ejemplos de este artículo se escriben 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?

Azure Queue Storage es un servicio para almacenar un gran número de mensajes a los que se puede acceder desde cualquier lugar del mundo a través de llamadas autenticadas mediante HTTP o HTTPS. Un único mensaje de 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 suele usar para crear un trabajo pendiente para procesar de forma asincrónica.

Conceptos del servicio de cola

Azure Queue Service contiene los siguientes componentes:

Componentes de Azure Queue Service

  • 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 estar 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 dirección URL: Las colas son direccionables con el siguiente formato de dirección URL: http://<storage account>.queue.core.windows.net/<queue>

    La siguiente dirección URL direcciona una cola en el diagrama:

    http://myaccount.queue.core.windows.net/incoming-orders

Creación de una cuenta de Azure Storage

La manera más fácil de crear su primera cuenta de Azure Storage es mediante el uso de Azure Portal. Para obtener más información, consulte Crear una cuenta de almacenamiento.

También puede crear una cuenta de Azure Storage mediante Azure PowerShell, Azure CLI, o el Azure Storage Resource Provider para .NET.

Si prefiere no crear una cuenta de almacenamiento en Azure en este momento, también puede usar el emulador de almacenamiento de Azurite para ejecutar y probar el código en un entorno local. Para más información, consulte Uso del emulador de Azurite para el desarrollo local de Azure Storage.

Descarga e instalación del SDK de Azure Storage para Python

El SDK de Azure Storage para Python requiere Python v2.7, v3.3 o posterior.

Instalación mediante PyPI

Para instalar a través del í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 v0.36 o versiones anteriores, desinstale el SDK anterior mediante pip uninstall azure-storage antes de instalar el paquete más reciente.

Para obtener métodos de instalación alternativos, consulte Sdk de Azure para Python.

Copia tus credenciales del portal de Azure

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:

  1. Inicie sesión en Azure Portal.

  2. Busque su cuenta de almacenamiento.

  3. 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.

    Captura de pantalla que muestra dónde se encuentra la configuración de las claves de acceso en Azure Portal

  4. En el panel Claves acceso, seleccione Mostrar claves.

  5. 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.

    Captura de pantalla que muestra cómo copiar una cadena de conexión desde Azure Portal

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 acceder a Queue Storage

El objeto QueueClient te permite trabajar con una cola. Agregue el código siguiente cerca de la parte superior de cualquier archivo de Python en el que quiera acceder mediante programación a una cola de Azure:

from azure.storage.queue import (
        QueueClient,
        BinaryBase64EncodePolicy,
        BinaryBase64DecodePolicy
)

import os, uuid

El os paquete proporciona compatibilidad para recuperar una variable de entorno. El uuid paquete proporciona soporte para generar un identificador único para un nombre de cola.

Creación de una cola

La cadena de conexión se recupera de la AZURE_STORAGE_CONNECTION_STRING variable de entorno 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 base64 al crear el 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()
                        )

Insertar 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)

Echar un vistazo a los mensajes

Puede ver los mensajes sin quitarlos de la cola llamando al método peek_messages. De forma predeterminada, este método examina un único mensaje.

# Peek at the first message
messages = queue_client.peek_messages()

for peeked_message in messages:
    print("Peeked message: " + peeked_message.content)

Cambia el contenido de un mensaje en cola

Puede cambiar el contenido de un mensaje directamente 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)

Obtén 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 la cola, incluyendo el 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.

Desencolar mensajes

Elimine 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.

Al llamar receive_messages, obtendrá el siguiente mensaje de la cola de forma predeterminada. Un mensaje devuelto por receive_messages se vuelve invisible para cualquier otro código que lea mensajes de esta cola. De forma predeterminada, este mensaje permanece invisible durante 30 segundos. Para completar la eliminación del 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 maneras de personalizar la recuperación de mensajes desde una cola. En primer lugar, puede obtener un lote de mensajes (hasta 32). En segundo lugar, puede establecer un tiempo de espera de invisibilidad más largo o más corto, lo que permite que el código tenga más o menos tiempo para procesar completamente cada mensaje.

En el ejemplo de código siguiente se usa el receive_messages método para obtener mensajes en lotes. A continuación, procesa cada mensaje dentro de cada lote mediante un bucle anidado for . También establece el tiempo de 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

Pruebe 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 ha aprendido los conceptos básicos de Queue Storage, siga estos vínculos para obtener más información.

Para ver ejemplos de código relacionados con sdk de Python versión 2 en desuso, consulte Ejemplos de código con la versión 2 de Python.