Gestión, uso y aplicación de Azure Storage Queue
El Azure Queue storage es un servicio cuyo objetivo consiste en el almacenamiento de un gran número de mensajes, los cuales pueden ser accedidos desde cualquier lugar a través de llamadas autenticadas mediante HTTP o HTTPS. Para llevar a cabo este almacenamiento se emplea una estructura de datos basada en la cola.
Creación de una cola en Azure
El primer paso para poder utilizar una cola de empieza por la creación de una storage account. Este proceso no conlleva dificultad alguna y es bastante dirigido. Lo primero que hay que hacer es entrar en el portal de azure, y después pulsar en New > Data + Storage > Storage Account
A continuación nos solicitarán los diversos datos de la storage account, nombre, tipo de localización, etc. Un punto muy importante a tener en cuenta es la selección del modo de creación de la cuenta: modo clásico o modo RM (resource manager), ya que la gestión y uso de las colas de momento no es posible hacerla en Powershell en modo RM, pero sí en modo clásico.
Una vez creada la cuenta, aparte de las colas, contamos con servicios de ficheros, tablas y blobs.
Y entre la información que nos ofrece el panel de nuestra storage account creada sobre las colas, todo lo necesario (nombre de la cuenta, claves de acceso y cadenas de conexión) para poder acceder a este recurso externamente.
Gestión de la storage account en Powershell
Hay que diferenciar aquí lo que se puede hacer en modo clásico o modo RM. En ambos modos, se pueden llevar a cabo las siguientes operaciones sobre la cuenta:
- Creación.
- Eliminación.
1 2 3 4 5 6 7 8 9 10 11 |
# Crear nueva cuenta de storage en modo clásico New-AzureStorageAccount #Eliminar cuenta en modo clásico Remove-AzureStorageAccount # Crear nueva cuenta en modo RM New-AzureRmStorageAccount # Eliminar cuenta en modo RM Remove-AzureRmStorageAccount |
El modo RM permite además de otras cosas, por ejemplo, regenerar la storage key de una cuenta
1 |
New-AzureRmStorageAccountKey |
Uso de las colas
En lo que se refiere al uso del servicio de las colas (creación, eliminación), así como las operaciones típicas sobre estas (inserción de un mensaje, extracción…), solo es posible hacerlo en modo clásico, puesto que en el modo RM no hay cmdlet disponibles de momento para ello. En los ejemplo se muestran los mismos.
Ejemplos
Como ejemplos sencillos de creación, inserción de un elemento, extracción del mismo y eliminación de una cola, tendríamos los siguientes:
En .NET, puede actuar indistintamente sobre una storage account creada en modo clásico o RM:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
namespace DataStorageQueue1Sample { using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Queue; using System; using System.Threading.Tasks; public class Program { public static void Main(string[] args) { Console.WriteLine("Ejemplo de Azure Storage Queue Samplen"); // Crea o referencia, si es que existe ya, una cola existente CloudQueue queue = CreateQueueAsync().Result; // Inserta un mensaje en la cola InsertMessageQueueAsync(queue).Wait(); // Extrae el elemento, lo muestra y lo elimina de la cola// ExtractMessageQueueAsync(queue).Wait(); // Elimina completamente la cola DeleteQueueAsync(queue).Wait(); Console.WriteLine(""); Console.WriteLine("- Pulsa la tecla Return para salir -"); Console.Read(); } // Crea una cola de ejemplo // private static async Task<CloudQueue> CreateQueueAsync() { // Recupera la información de la cuenta de almacenamiento (storage account) para la cadena de conexión CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(CloudConfigurationManager.GetSetting("StorageConnectionString")); // Crea un cliente para interactuar con el servicio de cola CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); Console.WriteLine("1. Crea una cola"); CloudQueue queue = queueClient.GetQueueReference("cola1"); try { await queue.CreateIfNotExistsAsync(); } catch (StorageException ex) { Console.WriteLine("Si la ejecución se está llevando a cabo con la configuración por defecto, asegúrese de que se ha iniciado el emulador de almacenamiento. Presiona la tecla Windows y escriba Azure Storage para seleccionar y ejecutarlo desde la lista de aplicaciones - a continuación reinicie este ejemplo"); Console.ReadLine(); throw; } return queue; } // Inserta un elemento en la cola // private static async Task InsertMessageQueueAsync(CloudQueue queue) { // Inserta un mensaje en la cola empleando el método AddMessageSync Console.WriteLine("2. Inserta un mensaje en la cola"); await queue.AddMessageAsync(new CloudQueueMessage("Mensaje de prueba")); } //Extrae el primer elemento de la cola, lo muestra y lo elimina de la cola// private static async Task ExtractMessageQueueAsync(CloudQueue queue) { //Mira el primer elemento de la cola// CloudQueueMessage peekedMessage = await queue.PeekMessageAsync(); //Lo muestra en pantalla// if (peekedMessage != null) { Console.WriteLine("* Elemento extraido de la cola."); Console.WriteLine("* El mensaje del elemento extraido es: {0}", peekedMessage.AsString); } //Lo elimina de la cola// CloudQueueMessage message = await queue.GetMessageAsync(); if (message != null) { await queue.DeleteMessageAsync(message); Console.WriteLine("* Elemento eliminado de la cola"); } } // Valida la cadena de conexión extraida de app.config// private static CloudStorageAccount CreateStorageAccountFromConnectionString(string storageConnectionString) { CloudStorageAccount storageAccount; try { storageAccount = CloudStorageAccount.Parse(storageConnectionString); } catch (FormatException) { Console.WriteLine("Información proporcionada respecto a la cuenta de almacenamiento inválida. Confirme que la AccountName y la AccountKey especificados en el fichero app.config son válidos - después reinicie el ejemplo"); Console.ReadLine(); throw; } catch (ArgumentException) { Console.WriteLine("Información proporcionada respecto a la cuenta de almacenamiento inválida. Confirme que la AccountName y la AccountKey especificados en el fichero app.config son válidos - después reinicie el ejemplo"); Console.ReadLine(); throw; } return storageAccount; } // Elimina completamente la cola// private static async Task DeleteQueueAsync(CloudQueue queue) { Console.WriteLine("3. Elimina la cola"); await queue.DeleteAsync(); } } } |
En Powershell, sólo se puede utilizar una cola creada de una storage account creada en modo clásico:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# Conexion con la cuenta de storage de Azure en modo ASM $SubscriptionName="[nombre de la subscripcion]" $DefaultEndpointsProtocol="https" $StorageAccountName="[nombre de la cuenta]" $QueueEndpoint="https://[nombre de la cuenta].queue.core.windows.net/" $QueueName="cola1" # Añade la cuenta y establece la subscripcion por defecto Add-AzureAccount Select-AzureSubscription -SubscriptionName $SubscriptionName # Recupera la Storage Key a partir del Storage Account Name $StorageAccountKey=Get-AzureStorageKey -StorageAccountName $StorageAccountName # Define el contexto $Ctx=New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey.Primary -Protocol $DefaultEndpointsProtocol -EndPoint $QueueEndpoint # Crea una nueva cola $Queue = New-AzureStorageQueue –Name $QueueName -Context $Ctx # Consulta las colas Get-AzureStorageQueue -Context $Ctx # Inserta un elemento en la cola creada $mensaje="Mensaje de prueba" $Queue.CloudQueue.AddMessage($mensaje) # Extrae el primer elemento de la cola $mensajeCola=$Queue.CloudQueue.GetMessage() # Muestra en pantalla todo el elemento (es un objeto, con varios campos) $mensajeCola # Elimina el elemento de la cola1 $Queue.CloudQueue.DeleteMessage($mensajeCola) # Elimina la cola al completo Remove-AzureStorageQueue –Name $QueueName –Context $Ctx |
Y esto es todo por mi parte. Espero haber mostrado un poco este servicio y las posibilidades del mismo.