Como utilizar o Armazenamento de Filas do Ruby

Dica

Experimentar o Explorador de Armazenamento do Microsoft Azure

O Explorador de Armazenamento do Microsoft Azure é uma aplicação autónoma e gratuita da Microsoft, que lhe permite trabalhar visualmente com dados do Armazenamento do Azure no Windows, macOS e Linux.

Descrição Geral

Este guia mostra-lhe como realizar cenários comuns com o serviço Armazenamento de Filas do Microsoft Azure. Os exemplos são escritos com a API do Ruby Azure. Os cenários abrangidos incluem inserir, pré-visualizar, obter e eliminar mensagens de fila, bem como criar e eliminar filas.

O que é o Armazenamento de filas?

O Armazenamento de Filas do Azure é um serviço para armazenar um grande número de mensagens que podem ser acedidas a partir de qualquer local no mundo através de chamadas autenticadas com HTTP ou HTTPS. Uma mensagem de fila única pode ter até 64 KB e uma fila pode conter milhões de mensagens, até ao limite da capacidade total de uma conta de armazenamento. O armazenamento de filas é frequentemente utilizado para criar um registo de tarefas pendentes para processar de forma assíncrona.

Conceitos de serviço de fila

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

Componentes do serviço fila do Azure

  • Conta de Armazenamento: todos os acessos ao Storage do Azure são efetuados através de uma conta de armazenamento. Para obter mais informações sobre contas de armazenamento, veja Descrição geral da conta de armazenamento.

  • Fila: uma fila contém um conjunto de mensagens. Todas as mensagens têm de estar numa fila. Tenha em atenção que o nome da fila tem de estar todo em minúsculas. Para obter informações sobre a nomenclatura de filas, veja Nomenclatura de Filas e Metadados.

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

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

    O seguinte URL endereça uma fila no diagrama:

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

Criar uma conta de armazenamento do Azure

A forma mais fácil de criar a primeira conta de armazenamento do Azure é com o portal do Azure. Para saber mais, veja Criar uma conta de armazenamento.

Também pode utilizar o Azure PowerShell, a CLI do Azure ou o Fornecedor de Recursos do Armazenamento do Azure para .NET.

Se preferir não criar uma conta de armazenamento no Azure neste momento, também pode utilizar o emulador de armazenamento do Azurite para executar e testar o código num ambiente local. Para obter mais informações, veja Utilizar o emulador do Azurite para o desenvolvimento local do Armazenamento do Azure.

Criar uma aplicação Ruby

Crie uma aplicação Ruby. Para obter instruções, veja Criar uma aplicação Ruby no Serviço de Aplicações no Linux.

Configurar a aplicação para aceder ao armazenamento

Para utilizar o Armazenamento do Azure, tem de transferir e utilizar o pacote do Ruby Azure, que inclui um conjunto de bibliotecas de conveniência que comunicam com os serviços REST de armazenamento.

Utilizar RubyGems para obter o pacote

  1. Utilize uma interface de linha de comandos, como PowerShell (Windows), Terminal (Mac), ou Bash (Unix).
  2. Escreva gem install azure na janela de comandos para instalar o gem e as dependências.

Importar o pacote

Utilize o seu editor de texto favorito, adicione o seguinte à parte superior do ficheiro Ruby onde pretende utilizar o armazenamento:

require "azure"

Configurar uma ligação de Armazenamento do Azure

O módulo do Azure irá ler as variáveis de ambiente e AZURE_STORAGE_ACCESS_KEY as informações necessárias AZURE_STORAGE_ACCOUNT para ligar à sua conta de Armazenamento do Azure. Se estas variáveis de ambiente não estiverem definidas, tem de especificar as informações da conta antes de utilizar 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 estes valores a partir de uma conta de armazenamento do Resource Manager ou clássica no portal do Azure:

  1. Inicie sessão no portal do Azure.
  2. Navegue para a conta de armazenamento que pretende utilizar.
  3. No painel Definições à direita, clique em Chaves de Acesso.
  4. No painel Chaves de Acesso apresentado, verá a chave de acesso 1 e a chave de acesso 2. Pode utilizar qualquer uma destas.
  5. Clique no ícone de cópia para copiar a chave para a área de transferência.

Como: Criar uma fila

O código seguinte cria um Azure::QueueService objeto, que lhe permite trabalhar com filas.

azure_queue_service = Azure::QueueService.new

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

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

Como: Inserir uma mensagem numa fila

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

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

Como: Pré-visualizar a mensagem seguinte

Pode pré-visualizar a mensagem na frente de uma fila sem a remover da fila ao chamar o peek_messages() método. Por predefinição, peek_messages() espreite uma única mensagem. Também pode especificar quantas mensagens pretende pré-visualizar.

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

Como: Desativar a mensagem seguinte

Pode remover uma mensagem de uma fila em dois passos.

  1. Quando chama list_messages(), recebe a mensagem seguinte numa fila por predefinição. Também pode especificar quantas mensagens pretende obter. As mensagens devolvidas list_messages() tornam-se invisíveis para quaisquer outras mensagens de leitura de código desta fila. Transmite o tempo limite de visibilidade em segundos como um parâmetro.
  2. Para concluir a remoção da mensagem da fila, também tem de chamar delete_message().

Este processo de dois passos de remoção de uma mensagem garante que quando o código não processa uma mensagem devido a uma falha de hardware ou software, outra instância do código pode obter a mesma mensagem e tentar novamente. O código chama delete_message() logo após o processamento da mensagem.

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

Pode alterar os conteúdos de uma mensagem no local na fila de espera. O código seguinte utiliza o update_message() método para atualizar uma mensagem. O método devolverá uma cadeia de identificação que contém o recibo pop da mensagem de fila e um valor UTC DateTime que representa quando a mensagem será 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)

Procedimentos: Opções adicionais para desativar mensagens

Existem duas formas através das quais pode personalizar a obtenção de mensagens a partir de uma fila.

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

O seguinte exemplo de código utiliza o list_messages() método para obter 15 mensagens numa chamada. Em seguida, imprime e elimina cada mensagem. Define também o tempo limite de invisibilidade para 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

Pode obter uma estimativa do número de mensagens na fila. O get_queue_metadata() método devolve a contagem aproximada de mensagens e outros metadados de fila.

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

Procedimentos: Eliminar uma fila

Para eliminar uma fila e todas as mensagens contidas na mesma, chame o delete_queue() método no objeto de fila.

azure_queue_service.delete_queue("test-queue")

Passos seguintes

Agora que aprendeu as noções básicas do Armazenamento de Filas, siga estas ligações para saber mais sobre tarefas de armazenamento mais complexas.

Para obter uma comparação entre o Armazenamento de Filas do Azure abordado neste artigo e as filas de Azure Service Bus abordadas em Como utilizar filas do Service Bus, veja Armazenamento de Filas do Azure e filas do Service Bus - comparadas e contrastadas