Como usar o Armazenamento de Filas do Ruby

Dica

Experimente usar o Gerenciador de Armazenamento do Microsoft Azure

O Gerenciador de Armazenamento do Microsoft Azure é um aplicativo autônomo e gratuito da Microsoft que possibilita o trabalho visual com os dados do Armazenamento do Azure no Windows, MacOS e Linux.

Visão geral

Este guia mostra como executar cenários comuns usando o serviço de Armazenamento de Fila do Microsoft Azure. Os exemplos são gravados usando a API do Ruby Azure. Os cenários abrangidos incluem inserir, exibir, obter e excluir mensagens da fila, bem como criar e excluir filas.

O que é armazenamento em fila?

O armazenamento de filas do Azure é um serviço para armazenamento de um grande número de mensagens que podem ser acessadas de qualquer lugar do mundo por meio de chamadas autenticadas usando HTTP ou HTTPS. Uma única mensagem de fila pode ter até 64 KB de tamanho e uma fila pode conter milhões de mensagens, até o limite de capacidade total de uma conta de armazenamento. O armazenamento em fila é usado com frequência para criar uma lista de pendências de trabalho a ser processada de forma assíncrona.

Conceitos do serviço Fila

O serviço Fila do Azure contém os seguintes componentes:

Componentes do serviço Fila do Azure

  • Conta de Armazenamento: todo o acesso ao Armazenamento do Azure é feito através de uma conta de armazenamento. Para saber mais sobre as contas de armazenamento, confira Visão geral da conta de armazenamento.

  • Fila: uma fila contém um conjunto de mensagens. Todas as mensagens devem estar em uma fila. Observe que o nome da fila deve estar em letras minúsculas. Para saber mais sobre filas de nomenclatura, confira Nomenclatura de filas e metadados.

  • Mensagem: uma mensagem, em qualquer formato, de até 64 KB. O tempo máximo que uma mensagem pode ficar na fila é de sete dias. Para a versão 2017-07-29 ou posterior, a vida útil máxima pode ser qualquer número positivo ou -1, indicando que a mensagem não expira. Se esse parâmetro for omitido, a vida útil padrão será de sete dias.

  • Formato de URL: as filas são endereçáveis usando o seguinte formato: http://<storage account>.queue.core.windows.net/<queue>

    A URL a seguir endereça um fila no diagrama:

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

Criar uma conta de armazenamento do Azure

A maneira mais fácil de criar sua primeira conta de armazenamento do Azure é usando o portal do Azure. Para saber mais, consulte Criar uma conta de armazenamento.

Você também pode criar uma conta de armazenamento do Azure usando o Azure PowerShell, a CLI do Azure ou o Provedor de Recursos de Armazenamento do Azure para .NET.

Se você preferir não criar uma conta de armazenamento no Azure neste momento, também pode usar o emulador de armazenamento Azurite para executar e testar seu código em um ambiente local. Para obter mais informações, consulte Usar o emulador Azurite para desenvolvimento local do armazenamento do Azure.

Criar um aplicativo Ruby

Crie um aplicativo Ruby. Para obter instruções, consulte Criar um Aplicativo Ruby no Serviço de Aplicativo no Linux.

Configurar seu aplicativo para acessar o armazenamento

Para usar o Armazenamento do Azure, você deverá baixar e usar o pacote do Azure para o Ruby, que inclui um conjunto de bibliotecas convenientes que se comunicam com os serviços REST do armazenamento.

Usar RubyGems para obter o pacote

  1. Use uma interface de linha de comando como PowerShell (Windows), Terminal (Mac) ou Bash (Unix).
  2. Digite gem install azure na janela de comando para instalar a gem e as dependências.

Importar o pacote

Use seu editor de texto favorito e adicione o seguinte na parte superior do arquivo do Ruby no qual você pretende usar o armazenamento:

require "azure"

Configurar uma conexão com o Armazenamento do Azure

O módulo do Azure lerá as variáveis do ambiente AZURE_STORAGE_ACCOUNT e AZURE_STORAGE_ACCESS_KEY para obter as informações necessárias para se conectar à sua conta de Armazenamento do Azure. Se essas variáveis de ambiente não forem definidas, você deverá especificar as informações da conta antes de usar Azure::QueueService com o seguinte código:

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

Para obter esses valores de uma conta de armazenamento clássico ou do Resource Manager no Portal do Azure:

  1. Faça logon no Portal do Azure.
  2. Navegue até a conta de armazenamento que você deseja usar.
  3. Na folha Configurações no lado direito, clique em Teclas de Acesso.
  4. Na folha Teclas de Acesso exibida, você verá as teclas de acesso 1 e 2. Você pode usar qualquer uma das duas.
  5. Clique no ícone de cópia para copiar a chave para a área de transferência.

Como criar uma fila

O código a seguir cria um objeto Azure::QueueService, permitindo que você trabalhe com filas.

azure_queue_service = Azure::QueueService.new

Use o método create_queue() para criar uma fila com o nome especificado.

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

Como inserir uma mensagem em uma fila

Para inserir uma mensagem em uma fila, use o método create_message() para criar uma nova mensagem e adicioná-la à fila.

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

Como inspecionar a próxima mensagem

Você pode inspecionar a mensagem na frente de uma fila sem removê-la da fila chamando o método peek_messages(). Por padrão, o peek_messages() inspeciona uma única mensagem. Você também pode especificar quantas mensagens deseja inspecionar.

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

Como remover a próxima mensagem da fila

É possível remover uma mensagem da fila em duas etapas.

  1. Ao chamar list_messages(), você recebe a próxima mensagem em uma fila por padrão. Você também pode especificar quantas mensagens deseja obter. As mensagens retornadas por list_messages() tornam-se invisíveis para todas as outras mensagens de leitura de código da fila. Passe o tempo limite de visibilidade em segundos como um parâmetro.
  2. Para terminar de remover a mensagem da fila, você também deve chamar delete_message().

Este processo de duas etapas de remover uma mensagem garante que quando o código não processa uma mensagem devido à falhas de hardware ou de software, outra instância do seu código pode receber a mesma mensagem e tentar novamente. O código chamará delete_message() logo depois que a mensagem tiver sido processada.

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

Como alterar o conteúdo de uma mensagem em fila

Você pode alterar o conteúdo de uma mensagem in-loco na fila. O código a seguir usa o método update_message()para atualizar uma mensagem. O método retornará uma tupla que contém o recebimento pop da mensagem da fila e um valor DateTime em UTC que representa quando a mensagem estará visível na fila.

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)

Como fazer: opções adicionais para remover mensagens da fila

Há duas maneiras de personalizar a recuperação da mensagem de uma fila.

  1. Você pode obter um lote de mensagens.
  2. Você pode definir um tempo limite de invisibilidade mais longo ou mais curto, permitindo mais ou menos tempo para seu código processar totalmente cada mensagem.

O exemplo de código a seguir usa o método list_messages() para obter 15 mensagens em uma chamada. Em seguida, ele lê e exclui cada mensagem. Ele também define o tempo limite de invisibilidade de cinco minutos para cada mensagem.

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

Como obter o comprimento da fila

Você pode obter uma estimativa do número de mensagens na fila. O método get_queue_metadata() retorna a contagem aproximada de mensagens e outros metadados de filas.

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

Como excluir uma fila

Para excluir uma fila e todas as mensagens que ela contém, chame o método delete_queue() no objeto da fila.

azure_queue_service.delete_queue("test-queue")

Próximas etapas

Agora que você aprendeu os conceitos básicos do Armazenamento de Filas, siga estes links para saber mais sobre tarefas de armazenamento mais complexas.

Para fazer uma comparação entre o Armazenamento de Filas do Azure discutido neste artigo e as filas do Barramento de Serviço do Azure discutidas em Como usar filas do Barramento de Serviço, confira Filas do Armazenamento de Filas e do Barramento de Serviço do Azure - comparações e contrastes