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 lalocation
variable 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 ctx
variable. 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-AzStorageQueue
cmdlet, 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 QueueClient
claseSendMessage
.
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 suDequeueCount
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 suDequeueCount
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 ReceiveMessages
mé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.