Como utilizar o Armazenamento de Filas do Azure a partir do PowerShell

O Armazenamento de Filas do Azure é um serviço para armazenar um grande número de mensagens que podem ser acedidas a partir de qualquer parte do mundo através de HTTP ou HTTPS. Para obter informações detalhadas, veja Introdução ao Armazenamento de Filas do Azure. Este artigo de procedimentos abrange operações comuns de Armazenamento de Filas. Saiba como:

  • Criar uma fila
  • Obter uma fila
  • Adicionar uma mensagem
  • Ler uma mensagem
  • Eliminar uma mensagem
  • Eliminar uma fila

Este guia de procedimentos requer o módulo Azure PowerShell (Az) v0.7 ou posterior. Execute Get-Module -ListAvailable Az para localizar a versão atualmente instalada. Se precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell).

Não existem cmdlets do PowerShell para o plano de dados para filas. Para realizar operações de planos de dados, como adicionar uma mensagem, ler uma mensagem e eliminar uma mensagem, tem de utilizar a biblioteca de cliente de armazenamento .NET, uma vez que é exposta no PowerShell. Pode criar um objeto de mensagem e, em seguida, pode utilizar comandos como AddMessage para realizar operações nessa mensagem. Este artigo mostra-lhe como fazê-lo.

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Iniciar sessão no Azure

Inicie sessão na sua subscrição do Azure com o comando Connect-AzAccount e siga as instruções no ecrã.

Connect-AzAccount

Obter lista de localizações

Se não souber qual a localização que quer utilizar, pode listar as localizações disponíveis. Depois de a lista ser apresentada, localize a que quer utilizar. Este exercício irá utilizar eastus. Armazene-o na variável location para utilização futura.

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

Criar grupo de recursos

Crie um grupo de recursos com o comando New-AzResourceGroup .

Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos. Armazene o nome do grupo de recursos numa variável para utilização futura. Neste exemplo, é criado um grupo de recursos chamado howtoqueuesrg na região eastus.

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

Criar conta de armazenamento

Crie uma conta de armazenamento padrão para fins gerais com armazenamento localmente redundante (LRS) com New-AzStorageAccount. Obtenha o contexto da conta de armazenamento que define a conta de armazenamento a ser utilizada. Ao efetuar ações em contas de armazenamento, referencia o contexto em vez de fornecer repetidamente as credenciais.

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

$ctx = $storageAccount.Context

Criar uma fila

O exemplo seguinte estabelece primeiro uma ligação ao Armazenamento do Azure com o contexto da conta de armazenamento, que inclui o nome da conta de armazenamento e a respetiva chave de acesso. Em seguida, chama cmdlet New-AzStorageQueue para criar uma fila com o nome howtoqueue.

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

Para obter informações sobre convenções de nomenclatura do Armazenamento de Filas do Azure, veja Nomenclatura de filas e metadados.

Obter uma fila

Pode consultar e obter uma fila específica ou uma lista de todas as filas numa conta de armazenamento. Os exemplos seguintes demonstram como obter todas as filas na conta de armazenamento e uma fila específica; ambos os comandos utilizam o cmdlet Get-AzStorageQueue .

# Retrieve a specific queue
$queue = Get-AzStorageQueue -Name $queueName -Context $ctx
# Show the properties of the queue
$queue

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

Adicionar uma mensagem a uma fila

As operações que afetam as mensagens reais na fila utilizam a biblioteca de cliente de armazenamento .NET, conforme exposto no PowerShell. Para adicionar uma mensagem a uma fila, crie uma nova instância do objeto de mensagem, Microsoft.Azure.Storage.Queue.CloudQueueMessage classe. Em seguida, chame o AddMessage método. Um CloudQueueMessage pode ser criado a partir de uma cadeia (no formato UTF-8) ou de uma matriz de bytes.

O exemplo seguinte demonstra como adicionar uma mensagem à sua fila.

# Create a new message using a constructor of the CloudQueueMessage class
$queueMessage = [Microsoft.Azure.Storage.Queue.CloudQueueMessage]::new("This is message 1")

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

# Add two more messages to the queue
$queueMessage = [Microsoft.Azure.Storage.Queue.CloudQueueMessage]::new("This is message 2")
$queue.CloudQueue.AddMessageAsync($queueMessage)

$queueMessage = [Microsoft.Azure.Storage.Queue.CloudQueueMessage]::new("This is message 3")
$queue.CloudQueue.AddMessageAsync($queueMessage)

Se utilizar o Explorador de Armazenamento do Azure, pode ligar-se à sua conta do Azure e ver as filas na conta de armazenamento e desagregar numa fila para ver as mensagens na fila.

Leia uma mensagem da fila e, em seguida, elimine-a

As mensagens são lidas por ordem de primeira e primeira tentativa. Isto não é garantido. Quando lê a mensagem da fila, esta torna-se invisível para todos os outros processos que olham para a fila. Isto garante que, se o código não conseguir processar a mensagem devido a uma falha de hardware ou software, outra instância do código pode obter a mesma mensagem e tentar novamente.

Este tempo limite de invisibilidade define quanto tempo a mensagem permanece invisível antes de estar novamente disponível para processamento. A predefinição é 30 segundos.

O seu código lê uma mensagem da fila em dois passos. Quando chama o Microsoft.Azure.Storage.Queue.CloudQueue.GetMessage método, recebe a mensagem seguinte na fila. Uma mensagem devolvida GetMessage torna-se invisível para qualquer outra mensagem de leitura de código desta fila. Para concluir a remoção da mensagem da fila, chama o Microsoft.Azure.Storage.Queue.CloudQueue.DeleteMessage método .

No exemplo seguinte, leu as três mensagens de fila e, em seguida, aguarde 10 segundos (o tempo limite de invisibilidade). Em seguida, leia as três mensagens novamente, eliminando as mensagens depois de as ler ao ligar DeleteMessagepara . Se tentar ler a fila depois de as mensagens serem eliminadas, $queueMessage será devolvido como $null.

# 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
$invisibleTimeout = [System.TimeSpan]::FromSeconds(10)

# Read the message from the queue, then show the contents of the message. Read the other two messages, too.
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result

# After 10 seconds, these messages reappear on the queue.
# Read them again, but delete each one after reading it.
# Delete the message.
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queue.CloudQueue.DeleteMessageAsync($queueMessage.Result.Id,$queueMessage.Result.popReceipt)
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queue.CloudQueue.DeleteMessageAsync($queueMessage.Result.Id,$queueMessage.Result.popReceipt)
$queueMessage = $queue.CloudQueue.GetMessageAsync($invisibleTimeout,$null,$null)
$queueMessage.Result
$queue.CloudQueue.DeleteMessageAsync($queueMessage.Result.Id,$queueMessage.Result.popReceipt)

Eliminar uma fila

Para eliminar uma fila e todas as mensagens contidas na mesma, chame o Remove-AzStorageQueue cmdlet. O exemplo seguinte mostra como eliminar a fila específica utilizada neste exercício com o Remove-AzStorageQueue cmdlet.

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

Limpar os recursos

Para remover todos os recursos que criou neste exercício, remova o grupo de recursos. Isto também elimina todos os recursos contidos no grupo. Neste caso, remove a conta de armazenamento criada e o próprio grupo de recursos.

Remove-AzResourceGroup -Name $resourceGroup

Passos seguintes

Neste artigo de procedimentos, aprendeu sobre a gestão básica do Armazenamento de Filas com o PowerShell, incluindo como:

  • Criar uma fila
  • Obter uma fila
  • Adicionar uma mensagem
  • Ler a mensagem seguinte
  • Eliminar uma mensagem
  • Eliminar uma fila

cmdlets de armazenamento Microsoft Azure PowerShell

Explorador de Armazenamento do Microsoft Azure