Azure Storage Queue es un tipo de servicios de colas de mensajes proporcionados por Azure, que proporciona infraestructura de almacenamiento de colas para una interfaz basada en REST, dentro y entre diferentes aplicaciones y servicios. El servicio de almacenamiento Azure Queue permite almacenar un gran número de mensajes a los que se puede acceder desde cualquier lugar a través de llamadas autenticadas mediante HTTP o HTTPS.

¿Para qué se utiliza la cola de almacenamiento Azure?

Las queues se utilizan para almacenar mensajes con el objetivo de conseguir la comunicación entre distintas aplicaciones que trabajan conjuntamente. Estas colas de mensajes son FIFO (First In First Out) y son de un único sentido.


Los usos comunes  de las  colas de almacenamiento  incluyen:

  • Creación de trabajo pendiente para el procesamiento asincrónico
  • Pueden transmitir mensajes de Azure Web a Azure Worker
  • Nivelación de carga
  • Balanceo de carga
  • El desacoplamiento temporal
  • Bajo acoplamiento

Las aplicaciones pueden añadir mensajes a una cola de programación utilizando el almacenamiento de biblioteca de cliente .NET, o puede llamar directamente a la API de almacenamiento.

Un mensaje de cola única 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. Los mensajes se almacenan en una cola de almacenamiento para un máximo de siete días, después será eliminado. La expiración del mensaje puede ser modificado mientras el mensaje está en la cola.

Una aplicación puede recuperar los mensajes de una cola en lotes para aumentar el rendimiento y mensajes de proceso en paralelo.

En este post, aprenderemos a crear colas de almacenamiento en azure, así como insertar una mensaje en la cola, y consumir los mensajes que hay en la cola. Para ello crearemos dos aplicaciones MVC, una será para crear mensajes e insertarlos en la cola y otra aplicación para consumir los mensajes almacenados en la cola.

Pasos a seguir:

Ejecutar el código de almacenamiento de azure

Para ejecutar el código en una cuenta de Almacenamiento de Azure, se puede hacer en la nube, o ejecutar el código en el emulador de almacenamiento de Azure.
En nuestro caso lo haremos con la primera opción:

Para crearnos una cuenta de almacenamiento en primer lugar nos vamos al portal de azure, en “Nuevo”, buscamos cuenta de “almacenamiento”  y le damos clic a “crear”, rellenamos los datos necesarios y le damos clic a “crear”.

Una de las características más importantes de nuestro almacenamiento,  es la administración de nuestras claves de acceso. Debemos de tener en cuenta el nombre que le hemos puesto  a nuestro almacenamiento y las claves, ya que las vamos a utilizar para conectar a azure.

 

Como dijimos anteriormente, también podemos utilizar tanto el emulador de Microsoft Azure Storage como una cuenta real de Azure.


Creación de la aplicación “CrearMensaje”

En visual studio, crearemos un nuevo proyecto, nos vamos a “File”, “New”, “Project” y creamos una aplicación MVC:

Crearemos una vista llamada “Index” y dentro un formulario muy sencillo que tendrá una caja de texto para introducir el mensaje en la Queue, y también un botón:

Instalar los paquetes necesarios (NuGet)

Es necesario instalar dos paquetes para trabajar con BLOB Storage.

Biblioteca del cliente de Almacenamiento de Microsoft Azure para .NET: este paquete proporciona acceso mediante programación a los recursos de datos de la cuenta de almacenamiento.

Biblioteca del Administrador de configuración de Microsoft Azure para .NET: este paquete proporciona una clase para analizar una cadena de conexión desde un archivo de configuración, independientemente de dónde se ejecute la aplicación.

– Hacer clic con el botón derecho en el proyecto, en el Explorador de soluciones, y eligir “Administrar paquetes NuGet“.

– Instalar el paquete Biblioteca del cliente de Almacenamiento y sus dependencias.

– Instalar el Administrador de configuración de Azure.

Luego, será necesario añadir los siguientes espacios de nombre:

using Microsoft.Azure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Queue;

Configuración de la cadena de conexión de almacenamiento

Para configurar la cadena de conexión abrir el archivo App.config, agregar el contenido del elemento <appSettings>, que se muestra a continuación. Reemplazar account-name por el nombre de su cuenta de almacenamiento, y account-key por la clave de acceso de su cuenta:

         <appSettings>

            <add key=”StorageConnectionString” value=”DefaultEndpointsProtocol=https;Account Name= queuetajamar; AccountKey= clave />

        </appSettings>

En caso de elegir el emulador de almacenamiento, utilizar un acceso directo que se asigna al nombre y la clave conocida de la cuenta:

<add key=”StorageConnectionString” value=”UseDevelopmentStorage=true;” />

Crear cola e introducir un mensaje en la cola de almacenamiento

En el controlador de nuestra aplicación, crearemos un ActionResult para nuestra vista Index.
El uso de los objetos CloudStorageAccount y CloudQueueClient, sirven para obtener tanto una referencia a una cola de almacenamiento Azure, y crear la cola si no existe todavía.
La clase CloudQueueMessage se utiliza como un contenedor para la colocación de los contenidos de un mensaje que se envía a la cola de almacenamiento Azure. El contenido del mensaje puede contener una cadena codificada en UTF-8 o una matriz de bytes.

public ActionResult Index(string mensaje)
{   // Obtiene cuenta de almacenamiento de la cadena de conexión.
CloudStorageAccount cuentaalmacenamiento =
CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting(“StorageConnectionString”));

   //Creamos el cliente para la cola.
CloudQueueClient colacliente = cuentaalmacenamiento.CreateCloudQueueClient();

  //Recuperamos el contenedor de la cola
CloudQueue cola = colacliente.GetQueueReference(“cola”);

  //Creamos la cola si no existe.
cola.CreateIfNotExists();

  //Creamos una fecha para nuestro mensaje
String Fecha = “Fecha: ” + DateTime.Now.ToShortDateString() + ” ” + DateTime.Now.ToShortTimeString();

  //creamos el contenido de nuestro mensaje que introducirá la fecha y el mensaje
CloudQueueMessage contenido = new CloudQueueMessage(Fecha + ” ” + mensaje);

   //añadimos el nuevo mensaje a la cola para ser consumido
cola.AddMessage(contenido);

      return View();
}      

Ahora vamos a introducir un primer mensaje en la cola de almacenamiento:

Ver el  mensaje en cola

Para comprobar los mensajes que tenemos almacenados en la cola lo podemos hacer desde nuestro visual studio, en “View”, “Cloud Explorer” y dentro de nuestro almacenamiento buscamos el nombre del contenedor que le pusimos a nuestra queue.

Le damos clic derecho a nuestro contenedor, y lo abrimos “Open Queue Editor

Podemos comprobar que allí se encuentra el mensaje que acabamos de introducir en nuestra cola de almacenamiento.

 

Recuperar el contenido individual de un mensaje en cola

Para Consumir el contenido de la cola de almacenamiento nos crearemos una segunda aplicación MVC, nos vamos a “File”, “New”, “Project”,
y le asignamos un nombre cualquiera a la aplicación. Luego nos crearemos un ActionResult para nuestra vista “ConsumirQueue” que será la que nos pintará los mensajes que hay en la cola.
En este proyecto debemos hacer casi los mismos pasos que en el anterior proyecto:
-añadir los paquetes NuGet: “WindowsAzure.Storage” y “Microsoft.WindowsAzure.ConfigurationManager”.
-añadir la cadena de conexión al fichero “webConfig”.
El método “PeekMessage”, sirve para la recuperación de mensajes de la cola, en la instancia del objeto CloudQueue.

public ActionResult ConsumirQueue()
{
// Obtiene cuenta de almacenamiento de la cadena de conexión.
CloudStorageAccount cuentaalmacenamiento =
CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting(“StorageConnectionString”));

//Creamos el cliente para la cola.
CloudQueueClient colacliente = cuentaalmacenamiento.CreateCloudQueueClient();

//Recuperamos el contenedor de la cola
CloudQueue cola = colacliente.GetQueueReference(“cola”);

//Creamos la cola si no existe.
cola.CreateIfNotExists();

  //Recuperamos el siguiente mensaje en la cola (último que se haya incluido)
CloudQueueMessage mensaje = cola.GetMessage();

//si el mensaje no es nulo que lo pinte en nuestra página
if (mensaje != null)
{
ViewBag.Mensaje = mensaje.AsString;
}

return View();
}


Es hora de probar nuestra aplicación, veremos que recibiremos automáticamente el mensaje 1, que enviamos en la aplicación de “CrearMensaje”

Probaremos introduciendo un segundo mensaje en la aplicación “CrearMensaje” y veremos como se almacena en la cola.

Como podemos ver hemos agregado un mensaje en la cola y después lo sacamos de la cola, recuperándolo con el click de un botón.


Este ejemplo es un resumen, lo que nos interesa sobretodo es ver la API que nos incluye el SDK de Azure para el manejo de colas.

Autora: Tatiana Patricia Mendoza Osinaga
Curso: Microsoft MCSD Web Applications + SharePoint Apps.
Centro: Tajamar
Año académico: 2016-2017