Compartir a través de


Uso de Azure Queue Storage desde PowerShell

Azure Queue Storage es un servicio para almacenar grandes cantidades de mensajes a los que puede obtenerse acceso desde cualquier lugar del mundo a través de HTTP o HTTPS. Para obtener más información, consulte Introducción a Azure Queue Storage. En este artículo de ayuda se describen operaciones de Queue Storage habituales. Aprenderá a:

  • Creación de una cola
  • Recuperar una cola
  • Agregar mensajes
  • Recuperar mensajes
  • Eliminar mensajes
  • Eliminación de una cola

Esta guía paso a paso requiere el módulo de Azure PowerShell (Az) v12.0.0. Ejecute Get-Module -ListAvailable Az para encontrar la versión instalada actualmente. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell.

No hay ningún cmdlet de PowerShell para el plano de datos de las colas. Para realizar operaciones de plano de datos como agregar un mensaje, leer un mensaje y eliminar un mensaje, debe usar la biblioteca del cliente de Storage de .NET como se expone en PowerShell. Cree un objeto de mensaje y después podrá usar comandos como AddMessage para realizar operaciones en dicho mensaje. En este artículo se explica cómo hacerlo.

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para empezar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Inicio de sesión en Azure

Inicie sesión en la suscripción a Azure con el comando Connect-AzAccount y siga las instrucciones de la pantalla. Si es necesario, puede especificar una suscripción agregando los parámetros TenantId y Subscription, e incluidos los valores respectivos.

Connect-AzAccount

Recuperar una lista de ubicaciones

Si no sabe qué ubicación desea usar, puede enumerar las ubicaciones disponibles mediante el Get-AzLocation cmdlet tal y como se muestra en el ejemplo proporcionado. Una vez que se muestre la lista, elija una ubicación y almacénela en lalocationvariable para su uso futuro. En los ejemplos de este ejercicio se usa eastus ubicación.

Get-AzLocation | Select-Object Location
$location = "eastus"

Crear un grupo de recursos

Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Elija un nombre para el grupo de recursos y almacénelo en la variable resourceGroup para su futuro uso. Este ejemplo usa el nombre de howtoqueuesrg.

Cree un grupo de recursos mediante una llamada al cmdlet New-AzResourceGroup y proporcione el nombre y la ubicación al parámetro ResourceGroupName tal como se muestra.

$resourceGroup = "howtoqueuesrg"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location

Crear una cuenta de almacenamiento

Una cuenta de Almacenamiento de Azure es un recurso con nombre único que contiene todos los objetos de datos como blobs, archivos, colas y tablas.

Elija un nombre para la cuenta de almacenamiento y almacénelo en la variable storageAccountName para su futuro uso. Este ejemplo usa el nombre de howtoqueuestorage.

A continuación, cree una cuenta de almacenamiento de uso general estándar con almacenamiento con redundancia local (LRS) mediante el cmdlet New-AzStorageAccount . Por último, establezca el contexto de la cuenta de almacenamiento que define la cuenta de almacenamiento y guárdelo en la ctxvariable. Hacer referencia al contexto con la variable permite realizar operaciones en una cuenta de almacenamiento sin proporcionar credenciales repetidamente.

$storageAccountName = "howtoqueuestorage"

$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup `
  -Name $storageAccountName `
  -Location $location `
  -SkuName Standard_LRS

$ctx = $storageAccount.Context

Creación de una cola

En primer lugar, elija un nombre para la cuenta de almacenamiento y almacénelo en la queueName variable. Este ejemplo usa el nombre de howtoqueuestorage. A continuación, cree una cola con el cmdlet New-AzStorageQueue y pase las variables queueName y ctx a los parámetros Name y Context tal como se muestra.

$queueName = "howtoqueue"
$queue = New-AzStorageQueue -Name $queueName -Context $ctx

Para obtener información sobre las convenciones de nomenclatura del servicio Azure Queue Storage, consulte Nomenclatura de colas y metadatos.

Recuperar una cola

Puede usar el cmdlet Get-AzStorageQueue para recuperar una cola específica, o una lista de todas las colas dentro de una cuenta de almacenamiento. En los ejemplos siguientes se muestra cómo recuperar todas las colas mediante el Get-AzStorageQueuecmdlet, y cómo especificar una cola mediante Name parámetro.

# Retrieve all queues and show their names
Get-AzStorageQueue -Context $ctx | Select-Object Name

# Retrieve a specific queue
$queue = Get-AzStorageQueue -Name $queueName -Context $ctx

# Show the properties of the queue
$queue

Adición de mensajes a una cola

Las operaciones que afectan a los mensajes de una cola usan la biblioteca cliente de almacenamiento de .NET como se expone en PowerShell. Para agregar un mensaje a una cola, pase el mensaje como una cadena al método de la QueueClientclaseSendMessage.

La cadena de mensaje debe estar en formato UTF-8.

En el ejemplo siguiente se muestra cómo agregar mensajes a la cola.

# Create a new message using a constructor of the CloudQueueMessage class
$queueMessage = "This is message 1"

# Add a new message to the queue
$queue.QueueClient.AddMessageAsync($queueMessage)

# Add two more messages to the queue
$queueMessages = @("This is message 2","This is message 3")
$queueMessages | foreach {$queue.QueueClient.AddMessageAsync($_)}

Si usa el Explorador de Azure Storage, puede conectarse a su cuenta de Azure, ver las colas de la cuenta de almacenamiento y explorar una de ellas para ver los mensajes de la cola.

Recuperación de mensajes de una cola

Aunque no siempre se garantiza, los mensajes se recuperan de una cola en mejor prueba, orden de primero en salir.

Según el caso de uso, puede recuperar uno o varios mensajes de una cola. También puede modificar la visibilidad de los mensajes, ya sea permitiendo o evitando que otros procesos accedan al mismo mensaje.

Hay dos maneras de recuperar mensajes de una cola:

  • Recibir: recuperar un mensaje mediante Receive quita el mensaje e incrementa su DequeueCount propiedad. A menos que se elimine un mensaje, se volverá a procesar en la cola.
  • Ver: Recuperar un mensaje mediante Peek permite "obtener una vista previa" de los mensajes de la cola. Peek no quita el mensaje ni incrementa su DequeueCount propiedad.

Recepción de mensajes

Cuando leer un mensaje de una cola mediante un método como ReceiveMessage, el mensaje se pone temporalmente en cola y se vuelve temporalmente invisible para otros procesos. Este tiempo de espera de visibilidad define cuánto tiempo permanece invisible el mensaje. El tiempo de espera de visibilidad predeterminado es de 30 segundos.

Si el mensaje no se procesa antes de que pase el tiempo de espera de visibilidad, se incrementa su DequeueCount propiedad y se vuelve a insertar al final de la cola. La reinserción del mismo mensaje garantiza que otro proceso pueda recuperar el mismo mensaje e intentarlo de nuevo.

En el ejemplo siguiente se establece la variable invisibleTimeout en 10 segundos y, a continuación, se leen dos mensajes de la cola.

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$visibilityTimeout = [System.TimeSpan]::FromSeconds(10)

# Read the message from the queue, then show the contents of the message. 
# Read the next message, too.
$queueMessage = $queue.QueueClient.ReceiveMessage($visibilityTimeout)
$queueMessage.Value
$queueMessage = $queue.QueueClient.ReceiveMessage($visibilityTimeout)
$queueMessage.Value

Puede recuperar varios mensajes de la cola simultáneamente mediante el ReceiveMessages método y pasando y el valor entero para especificar el número máximo de mensajes que se van a devolver.

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$visibilityTimeout = [System.TimeSpan]::FromSeconds(10)

# Read the messages from the queue, then show the contents of the messages.
$queueMessage = $queue.QueueClient.ReceiveMessages(5,$visibilityTimeout)
$queueMessage.Value

Ver el código de mensajes sin salir

En los casos de uso que pueden implicar colas compartidas o obtener una vista previa de los mensajes sin modificar su visibilidad, puede usar los PeekMessage y PeekMessages métodos. Al igual que con el ReceiveMessages ejemplo anterior, se pueden ver varios mensajes simultáneamente pasando un valor entero para especificar el número máximo de mensajes.

En los ejemplos siguientes se usan los métodos PeekMessage y PeekMessages para recuperar mensajes de una cola.

# Read the message from the queue, then show the contents of the message. 
$queueMessage = $queue.QueueClient.PeekMessage()
$queueMessage.Value

# Read the next four messages, then show the contents of the messages.
$queueMessage = $queue.QueueClient.PeekMessages(4)
$queueMessage.Value

Eliminación de mensajes de una cola

Para evitar que un mensaje se borre accidentalmente, antes de borrarlo definitivamente se deben indicar las propiedades MessageId y PopReceipt. Debido a este requisito, es más fácil eliminar un mensaje mediante un proceso de dos pasos.

En primer lugar, capture el siguiente mensaje de la cola llamando a los ReceiveMessage o ReceiveMessagesmétodos. Para terminar de quitar el mensaje de la cola, pase los valores obtenidos del mensaje al DeleteMessage método.

Este proceso se ilustra en los ejemplos siguientes.

# Set the amount of time you want to entry to be invisible after read from the queue
# If it is not deleted by the end of this time, it will show up in the queue again
$visibilityTimeout = [System.TimeSpan]::FromSeconds(10)

# Receive one message from the queue, then delete the message. 
$queueMessage = $queue.QueueClient.ReceiveMessage($visibilityTimeout)
$queue.QueueClient.DeleteMessage($queueMessage.Value.MessageId, $queueMessage.Value.PopReceipt)

# Receive four message from the queue, then delete the messages. 
$queueMessage = $queue.QueueClient.ReceiveMessages(4,$visibilityTimeout)
$queueMessage.Value | foreach { $queue.QueueClient.DeleteMessage($_.MessageId, $_.PopReceipt)}

Eliminación de una cola

Para eliminar una cola y todos los mensajes contenidos en ella, llame al QueueClient método Delete de la clase. En el ejemplo siguiente se muestra cómo eliminar la cola específica que se usa en este ejercicio.

# Delete the queue
Remove-AzStorageQueue -Name $queueName -Context $ctx

Limpieza de recursos

Elimine el grupo de recursos para eliminar los activos y recursos creados en este ejercicio. En este caso, también se eliminan la cuenta de almacenamiento y el propio grupo de recursos.

Remove-AzResourceGroup -Name $resourceGroup

Pasos siguientes

En este artículo de ayuda, ha aprendido conceptos básicos sobre la administración de Queue Storage con PowerShell. Por ejemplo:

  • Creación de una cola
  • Recuperar una cola
  • Agregar mensajes
  • Leer mensajes
  • Eliminación de mensajes
  • Eliminación de una cola

Cmdlets de almacenamiento de Microsoft Azure PowerShell

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.