Como usar o armazenamento em fila do Ruby
Tip
Experimente o Microsoft Azure Storage Explorer
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.
Visão geral
Este guia mostra como executar cenários comuns usando o serviço de Armazenamento de Filas do Microsoft Azure. Os exemplos são escritos usando a API do Ruby Azure. Os cenários abordados incluem inserir, visualizar, obtere eliminar mensagens de fila, bem como criar e eliminar filas.
O que é armazenamento em fila?
O Armazenamento de Filas do Azure é um serviço para armazenar 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 é frequentemente usado para criar uma lista de pendências de trabalho para processar de forma assíncrona.
Conceitos do Serviço de Fila
O serviço de Fila do Azure contém os seguintes componentes:
Conta de Armazenamento : Todo o acesso ao Armazenamento do Azure é feito por meio de uma conta de armazenamento. Para obter mais informações sobre contas de armazenamento, consulte Visã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 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 indicando que a mensagem não expira. Se esse parâmetro for omitido, o tempo de vida padrão será de sete dias.
formato URL: As filas são endereçáveis usando o seguinte formato de URL: http://
<storage account>
.queue.core.windows.net/<queue>
A seguinte URL aponta para uma 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, veja Criar uma conta de armazenamento.
Você também pode criar uma conta de armazenamento do Azure usando do Azure PowerShell, da CLI do Azure ou o Azure Storage Resource Provider for .NET.
Se preferir não criar uma conta de armazenamento no Azure neste momento, você 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 o desenvolvimento do Armazenamento do Azure local.
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ê precisa baixar e usar o pacote Ruby Azure, que inclui um conjunto de bibliotecas de conveniência que se comunicam com os serviços REST de armazenamento.
Use RubyGems para obter o pacote
- Use uma interface de linha de comando, como PowerShell (Windows), Terminal (Mac) ou Bash (Unix).
- 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, adicione o seguinte à parte superior do arquivo Ruby onde você pretende usar o armazenamento:
require "azure"
Configurar uma conexão de Armazenamento do Azure
O módulo do Azure lerá as variáveis de 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 estiverem definidas, você deverá especificar as informações da conta antes de usá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ássica ou do Gerenciador de Recursos no portal do Azure:
- Inicie sessão no portal do Azure.
- Navegue até a conta de armazenamento que deseja usar.
- Na folha Configurações à direita, clique em Teclas de Acesso.
- Na folha Teclas de Acesso exibida, você verá a chave de acesso 1 e a chave de acesso 2. Você pode usar qualquer um destes.
- 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
, que permite trabalhar 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 visualizar a próxima mensagem
Você pode visualizar a mensagem na frente de uma fila sem removê-la da fila chamando o método peek_messages()
. Por padrão, peek_messages()
verifica uma única mensagem. Também pode especificar quantas mensagens pretende visualizar.
result = azure_queue_service.peek_messages("test-queue",
{:number_of_messages => 10})
Como retirar a próxima mensagem da fila
Você pode remover uma mensagem de uma fila em duas etapas.
- Quando você chama
list_messages()
, você recebe a próxima mensagem em uma fila por padrão. Você também pode especificar quantas mensagens deseja receber. As mensagens retornadas dolist_messages()
tornam-se invisíveis para qualquer outro código que lê mensagens dessa fila. Você passa como um parâmetro o tempo limite de visibilidade em segundos. - Para concluir a remoção da mensagem da fila, você também deve chamar
delete_message()
.
Esse processo de duas etapas de remoção de uma mensagem garante que, quando o código não consegue processar uma mensagem devido a uma falha de hardware ou software, outra instância do código pode receber a mesma mensagem e tentar novamente. O seu código chama delete_message()
imediatamente após a mensagem ter 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 diretamente 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 "pop receipt" da mensagem da fila e um valor DateTime
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 desenfileirar mensagens
Há duas maneiras de personalizar a recuperação de mensagens de uma fila.
- Você pode receber um lote de mensagens.
- Você pode definir um tempo limite de invisibilidade maior ou menor, permitindo que seu código tenha mais ou menos tempo para processar completamente 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 imprime e exclui cada mensagem. Também define 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
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 da fila.
message_count, metadata = azure_queue_service.get_queue_metadata(
"test-queue")
Como: Excluir uma fila
Para excluir uma fila e todas as mensagens contidas nela, chame o método delete_queue()
no objeto queue.
azure_queue_service.delete_queue("test-queue")
Próximos passos
Agora que você aprendeu as noções básicas do armazenamento em fila, siga estes links para saber mais sobre tarefas de armazenamento mais complexas.
- Visite o blog da equipa do Armazenamento Azure
- Visite o repositório do SDK do do Azure para Ruby no GitHub
Para comparar a Fila de Armazenamento do Azure discutida neste artigo com as filas do Barramento de Serviço do Azure apresentadas em Como usar filas do Barramento de Serviço, consulte Comparação entre Fila de Armazenamento do Azure e filas do Barramento de Serviço - comparações e contrastes.