Compartir a través de


Introducción a Azure Queue Storage y servicios conectados de Visual Studio (proyectos de servicios en la nube)

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.

Información general

Importante

Cloud Services (clásico) ahora está en desuso para todos los clientes a partir del 1 de septiembre de 2024. Microsoft detendrá y cerrará todas las implementaciones en curso y los datos se perderán de forma permanente a partir de octubre de 2024. Las nuevas implementaciones deben utilizar el nuevo modelo de implementación basado en Azure Resource Manager Azure Cloud Services (soporte extendido) .

En este artículo se describe cómo empezar a usar Azure Queue Storage en Visual Studio después de crear o hacer referencia a una cuenta de almacenamiento de Azure en un proyecto de servicios en la nube mediante el cuadro de diálogo Agregar servicios conectados Visual Studio.

Le mostraremos cómo crear una cola en el código. También le mostraremos cómo realizar operaciones básicas de cola, como agregar, modificar, leer y quitar mensajes de cola. Los ejemplos están escritos en código de C# y usan la biblioteca cliente de Microsoft Azure Storage para .NET.

La operación Agregar servicios conectados instala los paquetes NuGet adecuados para acceder al almacenamiento de Azure en el proyecto y agrega la cadena de conexión de la cuenta de almacenamiento a los archivos de configuración del proyecto.

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.

Acceso a colas en código

Para acceder a las colas en proyectos de Visual Studio Cloud Services, debe incluir los siguientes elementos en cualquier archivo de origen de C# que acceda a Azure Queue Storage.

  1. Asegúrese de que las declaraciones de espacio de nombres en la parte superior del archivo de C# incluyen estas mediante instrucciones.

    using Microsoft.Framework.Configuration;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Queue;
    
  2. Consiga un objeto CloudStorageAccount que represente la información de su cuenta de almacenamiento. Utiliza el siguiente código para obtener tu cadena de conexión de almacenamiento y la información de la cuenta de almacenamiento de la configuración del servicio de Azure.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  3. Obtenga un objeto CloudQueueClient para referenciar los objetos de cola en su cuenta de almacenamiento.

    // Create the queue client.
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    
  4. Obtenga un objeto CloudQueue para hacer referencia a una cola específica.

    // Get a reference to a queue named "messageQueue"
    CloudQueue messageQueue = queueClient.GetQueueReference("messageQueue");
    

NOTA: Use todo el código de arriba delante del código en los ejemplos siguientes.

Creación de una cola en el código

Para crear la cola en el código, basta con agregar una llamada a CreateIfNotExists.

// Create the CloudQueue if it does not exist
messageQueue.CreateIfNotExists();

Agregar un mensaje a una cola

Para insertar un mensaje en una cola existente, cree un nuevo objeto CloudQueueMessage, y a continuación, llame al método AddMessage.

Se puede crear un objeto CloudQueueMessage a partir de una cadena (en formato UTF-8) o una matriz de bytes.

Este es un ejemplo que inserta el mensaje "Hello, World".

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
messageQueue.AddMessage(message);

Leer un mensaje en una cola

Puede ver el mensaje delante de una cola sin quitarlo de la cola llamando al método PeekMessage.

// Peek at the next message
CloudQueueMessage peekedMessage = messageQueue.PeekMessage();

Leer y eliminar un mensaje en una cola

Tu código puede eliminar (desencolar) un mensaje de una cola en dos pasos.

  1. Llame a getMessage para obtener el siguiente mensaje en una cola. Un mensaje devuelto de GetMessage se vuelve invisible para cualquier otro código que lea mensajes de esta cola. De forma predeterminada, este mensaje permanece invisible durante 30 segundos.
  2. Para terminar de quitar el mensaje de la cola, llame a DeleteMessage.

Este proceso de dos pasos para quitar un mensaje garantiza que si el código no puede procesar un mensaje debido a un error de hardware o software, otra instancia del código puede obtener el mismo mensaje e intentarlo de nuevo. El código siguiente llama a DeleteMessage justo después de que el mensaje ha sido procesado.

// Get the next message in the queue.
CloudQueueMessage retrievedMessage = messageQueue.GetMessage();

// Process the message in less than 30 seconds

// Then delete the message.
await messageQueue.DeleteMessage(retrievedMessage);

Uso de opciones adicionales para procesar y quitar mensajes de cola

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

  • Puede obtener un lote de mensajes (hasta 32).
  • 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 método GetMessages para obtener 20 mensajes en una llamada. A continuación, procesa cada mensaje mediante un bucle foreach. También establece el tiempo de espera de invisibilidad en cinco minutos para cada mensaje. Tenga en cuenta que los 5 minutos se inician para todos los mensajes al mismo tiempo, por lo que después de pasar 5 minutos desde la llamada a GetMessages, los mensajes que no se hayan eliminado volverán a ser visibles de nuevo.

Este es un ejemplo:

foreach (CloudQueueMessage message in messageQueue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
    // Process all messages in less than 5 minutes, deleting each message after processing.

    // Then delete the message after processing
    messageQueue.DeleteMessage(message);

}

Obtén la longitud de la cola

Puede obtener una estimación del número de mensajes existentes en una cola. El método FetchAttributes solicita al servicio Queue que recupere los atributos de cola, incluido el recuento de mensajes. La propiedad de ApproximateMethodCount devuelve el último valor recuperado por el método FetchAttributes, sin llamar al servicio Queue.

// Fetch the queue attributes.
messageQueue.FetchAttributes();

// Retrieve the cached approximate message count.
int? cachedMessageCount = messageQueue.ApproximateMessageCount;

// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);

Uso del patrón Async-Await con las API de colas comunes de Azure

En este ejemplo se muestra cómo usar el patrón de Async-Await con las API comunes de cola de Azure. El ejemplo llama a la versión asincrónica de cada uno de los métodos especificados, lo que se puede observar por el sufijo Async de cada método. Cuando se usa un método asincrónico, el patrón async-await suspende la ejecución local hasta que se complete la llamada. Este comportamiento permite que el subproceso actual realice otro trabajo, lo que ayuda a evitar cuellos de botella de rendimiento y mejora la capacidad de respuesta general de la aplicación. Para obtener más información sobre el uso del patrón de Async-Await en .NET, consulte Async y Await (C# y Visual Basic)

// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");

// Add the message asynchronously
await messageQueue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");

// Async dequeue the message
CloudQueueMessage retrievedMessage = await messageQueue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

// Delete the message asynchronously
await messageQueue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

Eliminar una cola

Para eliminar una cola y todos los mensajes contenidos en ella, llame al método Delete en el objeto queue.

// Delete the queue.
messageQueue.Delete();

Pasos siguientes

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