Compartir a través de


Windows Azure Queue

El servicio de colas de Windows Azure proporciona un mecanismo fiable y persistente para la comunicación entre aplicaciones de Windows Azure. El API de colas de Windows Azure, construido también sobre REST, está basado en dos tipos de abstracciones: colas y mensajes.

Las colas soportan atributos que se especifican como claves pares valor y que nos permiten asociar metadatos a las colas de manera que puedan identificarse o mantenerse datos asociados a las mismas.


Figura 1.- Diagrama de colas

Cada cuenta de almacenamiento puede contener un número ilimitado de colas de mensajes y cada cola puede contener un número de mensajes ilimitado. La principal limitación en las colas de Windows Azure viene marcada por el hecho de que el tamaño máximo de mensaje es 8Kb.

Cuando un mensaje se lee desde una cola, el consumidor del mensaje es responsable de, tras procesarlo, eliminarlo. Una vez el mensaje es leído, durante un periodo de tiempo no estará disponible para otros consumidores. Si el mensaje no es borrado en ese intervalo de tiempo, su visibilidad es restablecida de manera que otros consumidores pueden procesarlo.

Utilización de colas

Para utilizar el servicio de colas de Windows Azure el primer paso que debe darse es conectarse a una cola. Lógicamente se deberá crear la cola si no existe. El proceso es similar al que se realiza para otros tipos de almacenamiento.

El método FromConfigurationSetting de la clase CloudStorageAccount permite configurar la conexión al almacenamiento de Azure.

Luego es posible crear un cliente para el almacenamiento de colas llamando a CreateCloudQueueClient. El método GetQueueReference del CloudQueueClient permite obtener una referencia a la cola utilizando esta para llamar

al método CreateIfNotExists, que creará la cola si es necesario.

Puede verse el proceso en el siguiente ejemplo de código:

 // Establecer la conexión con Windows Azure Storage 
var storageAccount = CloudStorageAccount.FromConfigurationSetting
("DataConnectionString");
//Obtener un cliente para el servicio de colas
_QueueClient = storageAccount.CreateCloudQueueClient();
//Obtener una referencia a la cola y crearla si no existe
_Queue = _QueueClient.GetQueueReference("cola");
_Queue.CreateIfNotExist();

El siguiente paso es enviar un mensaje a la cola. Para enviar un mensaje a la cola sólo será necesario llamar al método AddMessage a través de la referencia a la cola.

 //Añadimos el mensaje a la cola 
_Queue.AddMessage(new CloudQueueMessage(GetNumberOfPhotos()));

El método AddMessage permite enviar un mensaje como texto o como un array de bytes.

El proceso de consumir un mensaje en muy simple. Basta con llamar al método GetMessage de la referencia a la cola, si hay algún mensaje el método devolverá el mensaje, sino null. Para acceder al contenido del mensaje se puede usar la propiedad AsString (si el mensaje se envió como un string) o AsBytes (si el mensaje se envió como un array de bytes).

//Vemos si hay un mensaje en la cola 
//Si lo hay leemos el número de fotos
CloudQueueMessage message = _Queue.GetMessage();
if (message != null)
{
int numberOfPhotos= int.Parse(message.AsString);
//Procesamos el mensaje ...
//Borramos el mensaje
_Queue.DeleteMessage(message);
}

No debe olvidarse nunca que el código que consume y procesa el mensaje es el encargado de eliminar el mensaje de la cola.