Introducción a Queue Storage y a los servicios conectados de Visual Studio (ASP.NET Core)Get started with queue storage and Visual Studio connected services (ASP.NET Core)

Sugerencia

Probar el Explorador de almacenamiento de Microsoft AzureTry the Microsoft Azure Storage Explorer

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.Microsoft Azure Storage Explorer is a free, standalone app from Microsoft that enables you to work visually with Azure Storage data on Windows, macOS, and Linux.

En este artículo se describe cómo empezar a usar Azure Queue Storage en Visual Studio después de crear una cuenta de Azure Storage en un proyecto de ASP.NET Core mediante la característica Servicios conectados de Visual Studio.This article describes how to get started using Azure Queue storage in Visual Studio after you have created or referenced an Azure storage account in an ASP.NET Core project by using the Visual Studio Connected Services feature. La operación Servicios conectados instala los paquetes de NuGet adecuados para acceder a Azure Storage en el proyecto y agrega la cadena de conexión de la cuenta de almacenamiento a los archivos de configuración del proyecto.The Connected Services operation installs the appropriate NuGet packages to access Azure storage in your project and adds the connection string for the storage account to your project configuration files. (Vea Documentación sobre Storage para información general sobre Azure Storage).(See Storage documentation for general information about Azure Storage.)

El almacenamiento de 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.Azure queue storage is a service for storing large numbers of messages that can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. Un único mensaje en cola puede tener un tamaño de hasta 64 kilobytes (KB) y una cola puede contener millones de mensajes, hasta el límite de capacidad total de una cuenta de almacenamiento.A single queue message can be up to 64 kilobytes (KB) in size, and a queue can contain millions of messages, up to the total capacity limit of a storage account. Vea también Introducción a Azure Queue Storage mediante .NET para más información sobre la manipulación de colas mediante programación.Also see Get started with Azure Queue storage using .NET for details on programmatically manipulating queues.

Para comenzar, primero debe crear una cola de Azure en la cuenta de almacenamiento.To get started, first create an Azure queue in your storage account. En este artículo también se explica cómo crear una cola en C# y cómo realizar operaciones básicas de cola, como agregar, modificar, leer y quitar mensajes de cola.This article then shows how to create a queue in C# and how to perform basic queue operations such as adding, modifying, reading, and removing queue messages. El código usa la biblioteca cliente de Azure Storage para .NET.The code uses the Azure Storage Client Library for .NET. Para obtener más información acerca de ASP.NET, consulte ASP.NET.For more information about ASP.NET, see ASP.NET.

Algunas de las API de Azure Storage son asincrónicas, y el código de este artículo asume que se usan métodos asincrónicos.Some of the Azure Storage APIs are asynchronous, and the code in this article assumes async methods are being used. Vea Programación asincrónica para más información.See Asynchronous programming for more information.

Acceso a colas en el códigoAccess queues in code

Para acceder a las colas de los proyectos de ASP.NET Core, incluya los elementos siguientes en los archivos de origen de C# que accedan a Azure Queue Storage.To access queues in ASP.NET Core projects, include the following items in any C# source file that accesses Azure queue storage. Use todo este código delante del código que aparece en las secciones siguientes.Use all of this code in front of the code in the sections that follow.

  1. Agregue las instrucciones using necesarias:Add the necessary using statements:

    using Microsoft.Framework.Configuration;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Queue;
    using System.Threading.Tasks;
    using LogLevel = Microsoft.Framework.Logging.LogLevel;
    
  2. Obtenga un objeto CloudStorageAccount que represente la información de su cuenta de almacenamiento.Get a CloudStorageAccount object that represents your storage account information. Use el código siguiente para obtener la cadena de conexión de almacenamiento y la información de la cuenta de almacenamiento de la configuración del servicio de Azure:Use the following code to get the storage connection string and storage account information from the Azure service configuration:

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  3. Obtenga un objeto CloudQueueClient para hacer referencia a los objetos de cola en la cuenta de almacenamiento:Get a CloudQueueClient object to reference the queue objects in your storage account:

    // Create the CloudQueueClient object for the storage account.
    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    
  4. Obtenga un objeto CloudQueue para hacer referencia a una cola específica:Get a CloudQueue object to reference a specific queue:

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

Creación de una cola en códigoCreate a queue in code

Para crear la cola de Azure en el código, llame a "CreateIfNotExistsAsync".To create the Azure queue in code, call ``CreateIfNotExistsAsync`:

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

un mensaje a una colaAdd a message to a queue

Para insertar un mensaje en una cola existente, cree un objeto CloudQueueMessage y luego llame al método AddMessageAsync.To insert a message into an existing queue, create a new CloudQueueMessage object, then call the AddMessageAsync method. Se puede crear un objeto CloudQueueMessage a partir de una cadena (en formato UTF-8) o de una matriz de bytes.A CloudQueueMessage object can be created from either a string (in UTF-8 format) or a byte array.

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

Leer un mensaje de una colaRead a message in a queue

Puede inspeccionar el mensaje situado en la parte delantera de una cola, sin quitarlo de la cola, mediante una llamada al método PeekMessageAsync:You can peek at the message in the front of a queue without removing it from the queue by calling the PeekMessageAsync method:

// Peek the next message in the queue.
CloudQueueMessage peekedMessage = await messageQueue.PeekMessageAsync();

Leer y eliminar un mensaje de una colaRead and remove a message in a queue

Su código puede quitar un mensaje de una cola en dos pasos.Your code can remove (dequeue) a message from a queue in two steps.

  1. Llame a GetMessageAsync para obtener el siguiente mensaje en una cola.Call GetMessageAsync to get the next message in a queue. Un mensaje devuelto por GetMessageAsync se hace invisible a cualquier otro código de lectura de mensajes de esta cola.A message returned from GetMessageAsync becomes invisible to any other code reading messages from this queue. De forma predeterminada, este mensaje permanece invisible durante 30 segundos.By default, this message stays invisible for 30 seconds.
  2. Para terminar de quitar el mensaje de la cola, llame a DeleteMessageAsync.To finish removing the message from the queue, call DeleteMessageAsync.

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.This two-step process of removing a message assures that if your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. El código siguiente llama a DeleteMessageAsync justo después de haber procesado el mensaje:The following code calls DeleteMessageAsync right after the message has been processed:

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

// Process the message in less than 30 seconds.

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

Opciones adicionales para quitar mensajes de la colaAdditional options for dequeuing messages

Hay dos formas de personalizar la recuperación de mensajes de una cola.There are two ways to customize message retrieval from a queue. En primer lugar, puede obtener un lote de mensajes (hasta 32).First, you can get a batch of messages (up to 32). 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.Second, you can set a longer or shorter invisibility timeout, allowing your code more or less time to fully process each message. El siguiente ejemplo de código utiliza el método GetMessages para obtener veinte mensajes en una llamada.The following code example uses the GetMessages method to get 20 messages in one call. A continuación, procesa cada mensaje con un bucle foreach.Then it processes each message using a foreach loop. También establece el tiempo de espera de la invisibilidad en cinco minutos para cada mensaje.It also sets the invisibility timeout to five minutes for each message. Tenga en cuenta que el temporizador de cinco minutos empieza a contar para todos los mensajes al mismo tiempo, por lo que, después de pasar los cinco minutos, todos los mensajes que no se han eliminado volverán a estar visibles.Note that the five minute timer starts for all messages at the same time, so after five minutes have passed, any messages that have not been deleted become visible again.

// Retrieve 20 messages at a time, keeping those messages invisible for 5 minutes, 
//   delete each message after processing.

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

la longitud de la colaGet the queue length

Puede obtener una estimación del número de mensajes existentes en una cola.You can get an estimate of the number of messages in a queue. El método FetchAttributes solicita a Queue service la recuperación de los atributos de la cola, incluido el número de mensajes.The FetchAttributes method asks the queue service to retrieve the queue attributes, including the message count. La propiedad ApproximateMethodCount devuelve el último valor recuperado por el método FetchAttributes, sin llamar a Queue service.The ApproximateMethodCount property returns the last value retrieved by the FetchAttributes method, without calling the queue service.

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

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

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

Uso del patrón Async-Await con API de cola comunesUse the Async-Await pattern with common queue APIs

En este ejemplo se muestra cómo usar el patrón Async-Await con API de cola comunes que terminan con Async.This example shows how to use the async-await pattern with common queue APIs ending with Async. Cuando se usa un método asincrónico, el patrón Async-Await suspende la ejecución local hasta que se complete la llamada.When an async method is used, the async-await pattern suspends local execution until the call is completed. Este comportamiento permite que el subproceso actual realice otro trabajo, lo que ayuda a evitar cuellos de botella en el rendimiento y mejora la capacidad de respuesta general de la aplicación.This behavior allows the current thread to do other work that helps avoid performance bottlenecks and improves the overall responsiveness of your application.

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

// Async enqueue the message.
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);

// Async delete the message.
await messageQueue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

Eliminación de una colaDelete a queue

Para eliminar una cola y todos los mensajes contenidos en ella, llame al método Delete en el objeto de cola:To delete a queue and all the messages contained in it, call the Delete method on the queue object:

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

Pasos siguientesNext steps

Ahora que está familiarizado con los aspectos básicos del almacenamiento de colas de Azure, use estos vínculos para obtener más información acerca de tareas de almacenamiento más complejas.Now that you've learned the basics of Azure queue storage, follow these links to learn about more complex storage tasks.