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 de Azure.Core para .NET: este paquete proporciona primitivos compartidos, abstracciones y asistentes para bibliotecas cliente modernas del SDK de Azure de .NET.
- Biblioteca cliente Azure.Storage.Common para .NET: este paquete proporciona la infraestructura compartida por las demás bibliotecas cliente de Azure Storage.
- Biblioteca cliente de Azure.Storage.Queues para .NET: este paquete permite trabajar con Azure Queue Storage para almacenar los mensajes a los que accede 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 de Queue Service
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();
Insertar 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. El código siguiente crea una cola (si no existe) e 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);
}
Echar un vistazo al siguiente mensaje
Puede ver los mensajes de la cola sin quitarlos de la cola llamando al PeekMessagesmétodo. Si no pasa un valor para el maxMessages parámetro, el valor predeterminado es examinar 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();
}
Cambia el contenido de un mensaje en cola
Puede cambiar el contenido de un mensaje directamente 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 código siguiente actualiza el mensaje de cola con nuevo contenido y establece el tiempo de espera de visibilidad para extender otros 60 segundos. Esto guarda el estado de trabajo asociado al mensaje y proporciona al cliente otro minuto para seguir trabajando en 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
Elimine un mensaje de una cola en dos pasos. Al llamar a ReceiveMessages, obtendrá el siguiente mensaje en una cola. Un mensaje devuelto por ReceiveMessages se vuelve invisible para cualquier otro código que lea mensajes de esta cola. De forma predeterminada, este mensaje permanece invisible durante 30 segundos. Para terminar de quitar 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. Tu código 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);
}
Obtén 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 contiene 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();
}