Использование Хранилища очередей Azure из PowerShell
Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получать доступ по протоколам HTTP или HTTPS практически из любой точки мира. Дополнительные сведения см. в статье "Что такое Хранилище очередей Azure?". В этом практическом руководстве рассматриваются распространенные операции с Хранилищем очередей. Узнайте следующие темы:
- Создать очередь
- Извлечение очереди
- Добавление сообщений
- Получение сообщений
- Удаление сообщений
- Удаление очереди
В этом руководстве требуется модуль Azure PowerShellAz
версии 12.0.0. Чтобы определить установленную в настоящее время версию, используйте командлет Get-Module -ListAvailable Az
. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell.
В PowerShell нет командлетов плоскости данных для очередей. Чтобы выполнять операции плоскости данных, такие как добавление, чтение и удаление сообщений, необходимо использовать клиентскую библиотеку хранилища .NET, так как она предоставлена в PowerShell. Создайте объект сообщения и используйте команды, например AddMessage
, для выполнения операций с этим сообщением. В этой статье показано, как это сделать.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Вход в Azure
Войдите в подписку Azure с помощью команды Connect-AzAccount
и следуйте инструкциям на экране. При необходимости можно указать подписку, добавив параметры TenantId
и Subscription
включив соответствующие значения.
Connect-AzAccount
Получение списка расположений
Если вы не знаете, какое расположение вы хотите использовать, можно перечислить доступные расположения с помощью командлета Get-AzLocation
, как показано в приведенном ниже примере. После отображения списка выберите расположение и сохраните его в переменной для дальнейшего location
использования. В примерах этого упражнения используется eastus
расположение.
Get-AzLocation | Select-Object Location
$location = "eastus"
Создание или изменение группы ресурсов
Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. Выберите имя группы ресурсов и сохраните ее в переменной для дальнейшего resourceGroup
использования. В этом примере используется имя howtoqueuesrg
.
Создайте группу ресурсов, вызвав командлет New-AzResourceGroup и указав имя и расположение ResourceGroupName
для параметра, как показано ниже.
$resourceGroup = "howtoqueuesrg"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location
Создание учетной записи хранилища
Учетная запись хранения Azure — это уникальный именованный ресурс, содержащий все объекты данных в виде больших двоичных объектов, файлов, очередей и таблиц.
Выберите имя учетной записи хранения и сохраните ее в переменной для дальнейшего storageAccountName
использования. В этом примере используется имя howtoqueuestorage
.
Затем создайте стандартную учетную запись хранения общего назначения с локальным избыточным хранилищем (LRS) с помощью командлета New-Az служба хранилища Account. Наконец, задайте контекст учетной записи хранения, определяющий учетную запись хранения, сохраняя ее в переменной ctx
. Ссылка на контекст с переменной позволяет выполнять операции с учетной записью хранения без многократного предоставления учетных данных.
$storageAccountName = "howtoqueuestorage"
$storageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup `
-Name $storageAccountName `
-Location $location `
-SkuName Standard_LRS
$ctx = $storageAccount.Context
Создать очередь
Сначала выберите имя учетной записи хранения и сохраните ее в переменной queueName
. В этом примере используется имя howtoqueuestorage
. Затем создайте очередь с помощью командлета New-Az служба хранилища Queue и передачи queueName
ctx
переменных в параметрыName
, Context
как показано ниже.
$queueName = "howtoqueue"
$queue = New-AzStorageQueue -Name $queueName -Context $ctx
Сведения о соглашениях об именовании, действующих для Хранилища очередей Azure, см. в статье "Именование очередей и метаданных".
Извлечение очереди
Командлет Get-Az служба хранилища Queue можно использовать для получения определенной очереди или списка всех очередей в учетной записи хранения. В следующих примерах показано, как получить все очереди с помощью командлета Get-AzStorageQueue
и как указать очередь с помощью Name
параметра.
# 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
Добавление сообщений в очередь
Операции, влияющие на сообщения в очереди, используют клиентская библиотека хранилища .NET, доступная в PowerShell. Чтобы добавить сообщение в очередь, передайте сообщение в виде строки QueueClient
в метод класса SendMessage
.
Строка сообщения должна быть в формате UTF-8.
В следующем примере показано, как добавлять сообщения в очередь.
# 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($_)}
Если вы используете Обозреватель службы хранилища Azure, можно подключиться к учетной записи хранения Azure и вывести на экран содержащиеся в ней очереди, а также детализировать одну из них, чтобы просмотреть сообщения в ней.
Получение сообщений из очереди
Хотя не всегда гарантируется, сообщения извлекаются из очереди в лучшем порядке, сначала в первом порядке .
В зависимости от варианта использования можно получить одно или несколько сообщений из очереди. Вы также можете изменить видимость сообщений, разрешая или запрещая другим процессам получать доступ к тому же сообщению.
Существует два способа получения сообщений из очереди:
- Получение: извлечение сообщения с помощью
Receive
отмены сообщения и добавит егоDequeueCount
свойство. Если сообщение не удалено, оно повторно будет обработано в очереди. - Просмотр. Получение сообщения с помощью
Peek
функции "предварительная версия" позволяет просматривать сообщения из очереди.Peek
не отменяет сообщение или увеличивает егоDequeueCount
свойство.
Получение сообщений
При чтении сообщения из очереди с помощью метода, напримерReceiveMessage
, сообщение временно отложено и становится временно невидимым для других процессов. Это время ожидания видимости определяет, как долго сообщение остается невидимым. Время ожидания видимости по умолчанию — 30 секунд.
Если сообщение не обрабатывается до истечения времени ожидания видимости, его DequeueCount
свойство увеличивается, и оно повторно включено в конце очереди. Повторное восстановление того же сообщения гарантирует, что другой процесс может получить то же сообщение и повторить попытку.
В следующем примере переменная невидимого Времениут устанавливается на 10 секунд, а затем считывает два сообщения из очереди.
# 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
Вы можете одновременно получить несколько сообщений из очереди с помощью ReceiveMessages
метода и передачи и целочисленного значения, чтобы указать максимальное количество возвращаемых сообщений.
# 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
Быстрое редактирование сообщений
Для вариантов использования, которые могут включать общие очереди или предварительные просмотры сообщений, не изменяя их видимость, можно использовать PeekMessage
методы и PeekMessages
методы. Как и в предыдущем ReceiveMessages
примере, можно одновременно просмотреть несколько сообщений, передав целочисленное значение, чтобы указать максимальное количество сообщений.
В следующих примерах используются как методы, так PeekMessage
и PeekMessages
методы для получения сообщений из очереди.
# 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
Удаление сообщений из очереди
Чтобы предотвратить случайное удаление, необходимо предоставить оба MessageId
PopReceipt
свойства перед окончательной удалением сообщения. Из-за этого требования проще всего удалить сообщение с помощью двухэтапного процесса.
Сначала получите следующее сообщение в очереди, вызвав ReceiveMessage
методы или ReceiveMessages
методы. Чтобы завершить удаление сообщения из очереди, передайте значения, полученные из сообщения методу DeleteMessage
.
Этот процесс показан в следующих примерах.
# 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)}
Удаление очереди
Чтобы удалить очередь и все сообщения, содержащиеся в нем, вызовите QueueClient
метод класса Delete
. В следующем примере показано, как удалить определенную очередь, используемую в этом упражнении.
# 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.