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

Совет

Пробное использование обозревателя хранилищ Microsoft Azure

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

Обзор

В этом руководстве показано, как реализовать типичные сценарии с использованием службы хранилища очередей Microsoft Azure. Примеры написаны с помощью Ruby Azure API. Здесь описаны такие сценарии, как вставка, просмотр, получение и удаление сообщений очереди, а также создание и удаление очередей.

Что такое хранилище очередей?

Хранилище очередей Azure — это служба для хранения большого количества сообщений, к которым можно получить доступ практически из любой точки мира с помощью вызовов с проверкой подлинности по протоколам HTTP или HTTPS. Одно сообщение очереди может быть размером до 64 КБ, а очередь может содержать миллионы сообщений до общего ограничения емкости учетной записи хранения. Хранилище очередей часто используется для создания списка невыполненных заданий для асинхронной обработки.

Основные понятия службы очередей

Служба очередей Azure содержит следующие компоненты:

Компоненты служба очередей Azure

  • Учетная запись хранения. Весь доступ к хранилищу Azure осуществляется с помощью учетной записи хранения. См. сведения об учетных записях хранения.

  • Очередь. Очередь содержит набор сообщений. Все сообщения должны находиться в очереди. Обратите внимание: имя очереди должно содержать только строчные символы. Дополнительные сведения см. в статье о присвоении имен очередям и метаданным.

  • Сообщение. Сообщение в любом формате размером до 64 КБ. Сообщение может оставаться в очереди не более 7 дней. Начиная с версии 2017-07-29, максимальный срок жизни может быть задан любым положительным числом или значением -1, свидетельствующим о том, что срок жизни сообщения неограничен. Если этот параметр не указан, срок жизни по умолчанию составляет семь дней.

  • Формат URL-адреса: обращаться к очередям можно с помощью URL-адреса следующего вида: http://<storage account>.queue.core.windows.net/<queue>

    Следующий URL-адрес позволяет обратиться к очереди на схеме:

    http://myaccount.queue.core.windows.net/incoming-orders

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

Самый простой способ создать первую учетную запись хранения Azure — воспользоваться порталом Azure. Дополнительную информацию см. в статье Об учетных записях хранения Azure.

Кроме того, создать учетную запись хранения Azure можно с помощью Azure PowerShell, Azure CLI или поставщика ресурсов службы хранилища Azure для .NET.

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

Создание приложения Ruby

Создайте приложение Ruby. Инструкции см. в статье о создании приложения Ruby в Службе приложений в Linux.

Настройка приложения для доступа к хранилищу

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

Использование RubyGems для получения пакета

  1. Используйте интерфейс командной строки, например PowerShell (Windows), Terminal (Mac) или Bash (Unix).
  2. Введите gem install azure в окне командной строки, чтобы установить пакет и зависимости.

Импорт пакета

Используйте свой любимый текстовый редактор, чтобы добавить следующий код в начало файла Ruby, где планируется использовать хранилище.

require "azure"

Настройка подключения к службе хранилища Azure

Модуль Azure будет считывать переменные среды AZURE_STORAGE_ACCOUNT и AZURE_STORAGE_ACCESS_KEY для получения сведений, необходимых для подключения к вашей учетной записи хранения Azure. Если эти переменные среды не заданы, необходимо указать сведения об учетной записи перед использованием объекта Azure::QueueService с помощью следующего кода:

Azure.config.storage_account_name = "<your azure storage account>"
Azure.config.storage_access_key = "<your Azure storage access key>"

Вот как можно получить эти значения из классический учетной записи хранения или учетной записи хранения Resource Manager на портале Azure.

  1. Войдите на портал Azure.
  2. Перейдите к учетной записи хранения, которая будет использоваться.
  3. В колонке Параметры справа щелкните Ключи доступа.
  4. В колонке Ключи доступа вы увидите ключи доступа 1 и 2. Можно использовать любой из них.
  5. Щелкните значок копирования, чтобы скопировать ключ в буфер обмена.

Практическое руководство. Создание очереди

В следующем примере кода создается объект Azure::QueueService, который позволяет работать с очередями.

azure_queue_service = Azure::QueueService.new

Используйте метод create_queue(), чтобы создать очередь с указанным именем.

begin
  azure_queue_service.create_queue("test-queue")
rescue
  puts $!
end

Практическое руководство. Вставка сообщения в очередь

Чтобы вставить сообщение в очередь, используйте метод create_message(). Новое сообщение будет создано и добавлено в очередь.

azure_queue_service.create_message("test-queue", "test message")

Практическое руководство. Просмотр следующего сообщения

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

result = azure_queue_service.peek_messages("test-queue",
  {:number_of_messages => 10})

Практическое руководство. Удаление следующего сообщения из очереди

Вы можете удалить сообщение из очереди в два этапа.

  1. При вызове метода list_messages() по умолчанию вы получаете следующее сообщение в очереди. Вы также можете указать количество сообщений для получения. Сообщения, возвращаемые методом list_messages(), становятся невидимыми для другого кода, считывающего сообщения из этой очереди. Время ожидания видимости (в секундах) передается в качестве параметра.
  2. Чтобы завершить удаление сообщения из очереди, необходимо также вызвать метод delete_message().

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

messages = azure_queue_service.list_messages("test-queue", 30)
azure_queue_service.delete_message("test-queue",
  messages[0].id, messages[0].pop_receipt)

Практическое руководство. Изменение содержимого сообщения в очереди

Вы можете изменить содержимое сообщения непосредственно в очереди. В следующем коде для обновления сообщения используется метод update_message(). Этот метод возвращает кортеж, содержащий подтверждение получения сообщения очереди, значение DateTime в формате UTC, представляющее время, когда сообщение будет видимо в очереди.

message = azure_queue_service.list_messages("test-queue", 30)
pop_receipt, time_next_visible = azure_queue_service.update_message(
  "test-queue", message.id, message.pop_receipt, "updated test message",
  30)

Практическое руководство. Использование дополнительных параметров для удаления сообщений из очереди

Способ извлечения сообщения из очереди можно настроить двумя способами.

  1. Можно получить пакет сообщения.
  2. Можно задать более длительное или короткое время ожидания невидимости, чтобы предоставить коду больше или меньше времени на полную обработку каждого сообщения.

В следующем примере кода метод list_messages() используется для получения 15 сообщений за один вызов. Затем код выводит и удаляет все сообщения. Он также задает время ожидания невидимости 5 минут для каждого сообщения.

azure_queue_service.list_messages("test-queue", 300
  {:number_of_messages => 15}).each do |m|
  puts m.message_text
  azure_queue_service.delete_message("test-queue", m.id, m.pop_receipt)
end

Практическое руководство. Получение длины очереди

Вы можете получить приблизительное количество сообщений в очереди. Метод get_queue_metadata() возвращает приблизительное число сообщений и другие метаданные очереди.

message_count, metadata = azure_queue_service.get_queue_metadata(
  "test-queue")

Практическое руководство. Удаление очереди

Чтобы удалить очередь и все сообщения в ней, вызовите метод delete_queue() для объекта очереди.

azure_queue_service.delete_queue("test-queue")

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

Вы изучили основные сведения о хранилище очередей. Дополнительные сведения о более сложных задачах по использованию хранилища можно найти по следующим ссылкам.

Сравнение Хранилища очередей Azure, описанного в этой статье, и очередей Служебной шины Azure, описанных в статье Как использовать очереди служебной шины, см. в статье Хранилище очередей Azure и очереди служебной шины: сходства и различия.