Creación y administración de Azure Queue Storage y mensajes mediante .NET
En esta unidad, se explica cómo crear colas y administrar mensajes en Azure Queue Storage mostrando fragmentos de código de un proyecto de .NET.
Los ejemplos de código se basan en los siguientes paquetes NuGet:
- Biblioteca Azure.Core para .NET: este paquete proporciona primitivas, abstracciones y aplicaciones auxiliares compartidas para las bibliotecas de cliente modernas de Azure SDK de .NET.
- Biblioteca cliente Azure Storage Common para .NET: Este paquete proporciona una infraestructura que comparte el resto de bibliotecas de cliente de Azure Storage.
- Biblioteca cliente Azure.Storage.Queues para .NET: este paquete permite trabajar con Azure Queue Storage para almacenar los mensajes a los que puede acceder un cliente.
- Biblioteca System.Configuration.ConfigurationManager para .NET: este paquete proporciona acceso a los archivos de configuración de las aplicaciones cliente.
Creación del cliente del servicio Cola
La clase QueueClient
permite recuperar las colas almacenadas en Queue Storage. Esta es una forma de crear el cliente de servicio:
QueueClient queueClient = new QueueClient(connectionString, queueName);
Creación de una cola
En este ejemplo se muestra cómo crear una cola si todavía no existe:
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue
queueClient.CreateIfNotExists();
un mensaje en una cola
Para insertar un mensaje en una cola existente, llame al método SendMessage
. Un mensaje puede ser una cadena (en formato UTF-8) o una matriz de bytes. En el código siguiente se crea una cola (si es que no existe) y se inserta un mensaje:
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue if it doesn't already exist
queueClient.CreateIfNotExists();
if (queueClient.Exists())
{
// Send a message to the queue
queueClient.SendMessage(message);
}
Inspección del siguiente mensaje
Puede inspeccionar el mensaje de la cola sin tener que quitarlo de ella, mediante una llamada al método PeekMessages
. Si no pasa un valor para el parámetro maxMessages
, el valor predeterminado es inspeccionar un mensaje.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Peek at the next message
PeekedMessage[] peekedMessage = queueClient.PeekMessages();
}
contenido de un mensaje en cola
Puede cambiar el contenido de un mensaje local en la cola. Si el mensaje representa una tarea de trabajo, puede usar esta característica para actualizar el estado de la tarea de trabajo. El siguiente código actualiza el mensaje de la cola con contenido nuevo y amplía el tiempo de espera de la visibilidad en 60 segundos más. De este modo, se guarda el estado de trabajo asociado al mensaje y se le proporciona al cliente un minuto más para que siga elaborando el mensaje.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the message from the queue
QueueMessage[] message = queueClient.ReceiveMessages();
// Update the message contents
queueClient.UpdateMessage(message[0].MessageId,
message[0].PopReceipt,
"Updated contents",
TimeSpan.FromSeconds(60.0) // Make it invisible for another 60 seconds
);
}
Extracción del siguiente mensaje de la cola
Quitar un mensaje de una cola en dos pasos. Al llamar a ReceiveMessages
, obtiene el siguiente mensaje de una cola. Un mensaje devuelto por ReceiveMessages
se hace invisible a cualquier otro código de lectura de mensajes de esta cola. De forma predeterminada, este mensaje permanece invisible durante 30 segundos. Para terminar quitando el mensaje de la cola, también debe llamar a DeleteMessage
. 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. El código siguiente llama a DeleteMessage
justo después de haberse procesado el mensaje.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the next message
QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();
// Process (i.e. print) the message in less than 30 seconds
Console.WriteLine($"Dequeued message: '{retrievedMessage[0].Body}'");
// Delete the message
queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
}
la longitud de la cola
Puede obtener una estimación del número de mensajes existentes en una cola. El método GetProperties
devuelve propiedades de cola, incluido el recuento de mensajes. La propiedad ApproximateMessagesCount
obtiene el número aproximado de mensajes en la cola. Este número no es menor que el número real de mensajes de la cola, pero podría ser mayor.
/// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
QueueProperties properties = queueClient.GetProperties();
// Retrieve the cached approximate message count.
int cachedMessagesCount = properties.ApproximateMessagesCount;
// Display number of messages.
Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
}
Eliminación de una cola
Para eliminar una cola y todos los mensajes contenidos en ella, llame al método Delete
en el objeto de cola.
/// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Delete the queue
queueClient.Delete();
}