Использование Хранилища очередей 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.