Поделиться через


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