Использование Хранилища очередей Azure из PowerShell

Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получать доступ по протоколам HTTP или HTTPS практически из любой точки мира. Дополнительные сведения см. в статье "Что такое Хранилище очередей Azure?". В этом практическом руководстве рассматриваются распространенные операции с Хранилищем очередей. Вы узнаете, как выполнять следующие задачи:

  • Создание очереди
  • Извлечение очереди
  • Добавление сообщения
  • Чтение сообщения
  • Удаление сообщения
  • Удаление очереди

Для работы с этим практическим руководством требуется модуль Azure PowerShell (Az) версии 0.7 или более поздней. Чтобы определить установленную в настоящее время версию, используйте командлет Get-Module -ListAvailable Az. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell.

В PowerShell нет командлетов плоскости данных для очередей. Чтобы выполнять операции плоскости данных, такие как добавление, чтение и удаление сообщений, необходимо использовать клиентскую библиотеку хранилища .NET, так как она предоставлена в PowerShell. Создайте объект сообщения и используйте команды, например AddMessage, для выполнения операций с этим сообщением. В этой статье показано, как это сделать.

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Вход в Azure

Войдите в подписку Azure с помощью команды Connect-AzAccount и следуйте инструкциям на экране.

Connect-AzAccount

Получение списка расположений

Если вы не знаете, какое расположение нужно использовать, можно получить список доступных расположений. Получив список, найдите расположение, которое нужно использовать. В этом упражнении будет использоваться расположение eastus. Сохраните его в переменной location для использования в будущем.

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

Создать группу ресурсов

Создайте группу ресурсов с помощью команды New-AzResourceGroup.

Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. Сохраните имя группы ресурсов в переменной для будущего использования. В этом примере создается группа ресурсов howtoqueuesrg в регионе eastus.

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

Создание учетной записи хранения

Создайте стандартную учетную запись хранения общего назначения с локально избыточным хранилищем (LRS) с помощью команды New-AzStorageAccount. Получите контекст учетной записи хранения, определяющий необходимую учетную запись хранения. Действуя в учетной записи хранения, ссылайтесь на контекст, вместо того чтобы многократно предоставлять учетные данные.

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

$ctx = $storageAccount.Context

Создание очереди

Сначала в этом примере устанавливается соединение со службой хранилища Azure, используя контекст учетной записи хранения, который включает имя учетной записи хранения и ее ключ доступа. Затем вызывается командлет New-AzStorageQueue, чтобы создать очередь с именем howtoqueue.

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

Сведения о соглашениях об именовании, действующих для Хранилища очередей Azure, см. в статье "Именование очередей и метаданных".

Извлечение очереди

Можно запрашивать и получать указанную очередь или список всех очередей в учетной записи хранения. В следующих примерах демонстрируется извлечение всех очередей в учетной записи хранения и определенной очереди. Обе команды используют командлет 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

Добавление сообщения в очередь

Для операций с фактическими сообщениями в очереди используйте клиентскую библиотеку хранилища .NET, предоставленную в PowerShell. Чтобы добавить сообщение в очередь, создайте экземпляр объекта сообщения, т. е. класса Microsoft.Azure.Storage.Queue.CloudQueueMessage. Затем вызовите метод AddMessage. CloudQueueMessage можно создать либо из строки (в формате UTF-8), либо из массива байтов.

В следующем примере демонстрируется добавление сообщений в очередь.

# 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)

Если вы используете Обозреватель службы хранилища Azure, можно подключиться к учетной записи хранения Azure и вывести на экран содержащиеся в ней очереди, а также детализировать одну из них, чтобы просмотреть сообщения в ней.

Считывание сообщения из очереди и его удаление

Сообщения считываются в порядке их поступления. Это не гарантируется. При считывании сообщения из очереди оно становится невидимым для других процессов, просматривающих очередь. Это позволяет удостовериться, что если коду не удастся обработать сообщение из-за сбоя оборудования или программного обеспечения, другой экземпляр кода сможет получить то же сообщение и повторить попытку.

Это время ожидания невидимости определяет, как долго сообщение остается невидимым, прежде чем снова станет доступным для обработки. По умолчанию это 30 секунд.

Ваш код считывает сообщение из очереди в два этапа. Сначала вызывается метод Microsoft.Azure.Storage.Queue.CloudQueue.GetMessage, чтобы получить следующее сообщение в очереди. Сообщение, возвращаемое методом GetMessage, становится невидимым для другого кода, считывающего сообщения из этой очереди. Затем вызывается метод Microsoft.Azure.Storage.Queue.CloudQueue.DeleteMessage, чтобы завершить удаление сообщения из очереди.

В следующем примере можно прочитать три сообщения в очереди, после чего следует время ожидания 10 секунд (время ожидания невидимости). Затем можно снова прочитать эти три сообщения и удалить их после прочтения, вызвав метод DeleteMessage. При попытке чтения из очереди после того, как сообщения будут удалены, в качестве $queueMessage будет возвращено значение $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)

Удаление очереди

Чтобы удалить очередь и все содержащиеся в ней сообщения, вызовите командлет Remove-AzStorageQueue. В следующем примере показано, как удалить очередь, с которой мы работали в этом упражнении, используя командлет Remove-AzStorageQueue.

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

Очистка ресурсов

Чтобы удалить все ресурсы, созданные в этом упражнении, удалите группу ресурсов. При этом будут также удалены все ресурсы, содержащиеся в группе. В этом случае происходит удаление созданной учетной записи хранения и самой группы ресурсов.

Remove-AzResourceGroup -Name $resourceGroup

Дальнейшие действия

Из этого практического руководства вы узнали, как выполнять основные задачи управления Хранилищем очередей с помощью PowerShell, в том числе:

  • Создание очереди
  • Извлечение очереди
  • Добавление сообщения
  • Чтение следующего сообщения
  • Удаление сообщения
  • Удаление очереди

Командлеты Microsoft Azure PowerShell для службы хранилища

Обозреватель службы хранилища Microsoft Azure

  • Обозреватель хранилищ Microsoft Azure — это бесплатное автономное приложение от корпорации Майкрософт, позволяющее визуализировать данные из службы хранилища Azure на платформе Windows, macOS и Linux.