Procedimiento para usar Queue Storage desde Ruby

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.

Información general

Esta guía muestra cómo realizar algunas tareas comunes a través del servicio Microsoft Azure Queue Storage. Los ejemplos están escritos usando la API Ruby de Azure. Entre los escenarios descritos se incluyen insertar, ojear, obtener y eliminar mensajes de la cola, así como crear y eliminar colas.

¿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:

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

Creación de una aplicación de Ruby

Cree una aplicación de Ruby. Para obtener instrucciones, vea Creación de una aplicación de Ruby en App Service en Linux.

Configuración de la aplicación para acceder al almacenamiento

Para usar Azure Storage, tendrá que descargar y usar el paquete Ruby Azure, que incluye un conjunto de bibliotecas útiles que se comunican con los servicios REST de almacenamiento.

Uso de RubyGems para obtener el paquete

  1. Use una interfaz de línea de comandos como PowerShell (Windows), Terminal (Mac) o Bash (Unix).
  2. Escriba gem install azure en la ventana de comandos para instalar la gema y las dependencias.

Importación del paquete

Con el editor de texto que prefiera, agregue lo siguiente al principio del archivo de Ruby en el que pretenda utilizar el almacenamiento:

require "azure"

Configuración de una conexión de Azure Storage

El módulo de Azure leerá las variables de entorno AZURE_STORAGE_ACCOUNT y AZURE_STORAGE_ACCESS_KEY para obtener la información necesaria para conectarse a la cuenta de Azure Storage. Si no se establecen estas variables de entorno, tendrá que especificar la información de la cuenta antes de usar Azure::QueueService con el código siguiente:

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

Para obtener estos valores desde una cuenta de almacenamiento de Azure Resource Manager o clásica en el Portal de Azure:

  1. Inicie sesión en Azure Portal.
  2. Vaya a la cuenta de almacenamiento que desea utilizar.
  3. En la hoja Configuración de la derecha, haga clic en Claves de acceso.
  4. En la hoja Claves de acceso que aparece, verá las claves de acceso 1 y 2. Puede usar cualquiera de estas.
  5. Haga clic en el icono de copia para copiar la clave en el Portapapeles.

Procedimientos: Creación de una cola

El siguiente código crea un objeto Azure::QueueService , que le permite trabajar con colas.

azure_queue_service = Azure::QueueService.new

Use el método create_queue() para crear una cola con el nombre especificado.

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

Procedimientos: un mensaje en una cola

Para insertar un mensaje en una cola, use el método create_message() para crear un mensaje y agregarlo a la cola.

azure_queue_service.create_message("test-queue", "test message")

Procedimientos: siguiente mensaje

Puede ver el código sin salir del mensaje situado en la parte delantera de una cola, sin quitarlo de la cola, mediante una llamada al método peek_messages(). De forma predeterminada, peek_messages() inspecciona un único mensaje. También puede indicar cuántos mensajes desea inspeccionar.

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

Procedimientos: Extracción del siguiente mensaje de la cola

Puede borrar un mensaje de una cola en dos pasos.

  1. Si llama a list_messages(), obtiene, de forma predeterminada, el siguiente mensaje de una cola. También puede indicar cuántos mensajes desea obtener. Los mensajes devueltos por list_messages() se hacen invisibles para cualquier otro código de lectura de mensajes de esta cola. Usted proporciona el tiempo de espera de la visibilidad en segundos a modo de parámetro.
  2. Para terminar quitando el mensaje de la cola, también debe llamar a delete_message().

Este proceso de extracción de un mensaje que consta de dos pasos garantiza que si su código no puede procesar un mensaje a causa de un error de hardware o software, otra instancia de su código puede obtener el mismo mensaje e intentarlo de nuevo. El código siguiente llama a delete_message() justo después de haberse procesado el mensaje.

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue",
  messages[0].id, messages[0].pop_receipt)

Procedimientos: contenido de un mensaje en cola

Puede cambiar el contenido de un mensaje local en la cola. En el código siguiente se usa el método update_message() para actualizar un mensaje. El método devolverá una tupla que contiene la recepción de confirmación del mensaje en cola y un valor DateTime UTC que representa el momento en que el mensaje será visible en la cola.

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message",
  30)

Procedimiento: Opciones adicionales para quitar mensajes de la cola

Hay dos formas de personalizar la recuperación de mensajes de una cola.

  1. En primer lugar, puede obtener un lote de mensajes.
  2. 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 list_messages() para obtener 15 mensajes en una llamada. A continuación, imprime y elimina cada mensaje. También establece el tiempo de espera de la invisibilidad en cinco minutos para cada mensaje.

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

Procedimientos: la longitud de la cola

Puede obtener una estimación del número de mensajes existentes en la cola. El método get_queue_metadata() devuelve el recuento aproximado de mensajes y otros metadatos de la cola.

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

Procedimientos: Eliminación de una cola

Para eliminar una cola y todos los mensajes que contiene, llame al método delete_queue() en el objeto de cola.

azure_queue_service.delete_queue("test-queue")

Pasos siguientes

Ahora que ha aprendido los aspectos básicos de Queue Storage, siga estos vínculos para obtener más información sobre tareas de almacenamiento más complejas.

Para obtener una comparación entre Azure Queue Storage, que se explica en este artículo, y las colas de Azure Service Bus, que se explican en el artículo Uso de colas de Service Bus con Ruby, vea Colas de Storage y de Service Bus: comparación y diferencias.