Migrar filas de obtenção para o Pub/Sub (Java)

Esta página explica como migrar o código da fila de obtenção das filas de tarefas para o Pub/Sub. O Pub/Sub é agora a forma preferencial de realizar o trabalho da fila de obtenção no App Engine.

Se a sua app usar filas de obtenção e filas de envio, use este guia para migrar as filas de obtenção para o Pub/Sub antes de migrar as filas de envio para o novo serviço de filas de envio Cloud Tasks. Não é recomendável migrar as filas de obtenção depois de migrar as filas de envio para o Cloud Tasks porque a utilização obrigatória do ficheiro queue.yaml tem probabilidade de causar um comportamento inesperado com o Cloud Tasks.

Funcionalidades atualmente não disponíveis no Pub/Sub

As seguintes funcionalidades de filas de tarefas não estão atualmente disponíveis no Pub/Sub:

  • Agrupamento por etiqueta
  • Eliminação de duplicados automática

Preços e quotas

A migração das filas de obtenção para o Pub/Sub pode afetar os preços e as quotas da sua app.

Preços

O Pub/Sub tem os seus próprios preços. Tal como com as filas de tarefas, o envio de pedidos para a sua app do App Engine com o Pub/Sub pode fazer com que a sua app incorra em custos.

Quotas

As quotas do Pub/Sub são diferentes das quotas das filas de tarefas. Tal como acontece com as filas de tarefas, o envio de pedidos para a sua app do App Engine a partir do Pub/Sub pode afetar as quotas de pedidos do App Engine.

Antes da migração

As secções seguintes abordam os passos de configuração antes de migrar as filas de obtenção para o Pub/Sub.

Ativar a API Pub/Sub

Para ativar a API Pub/Sub, clique em Ativar na API Pub/Sub na biblioteca de APIs. Se vir um botão Gerir em vez de um botão Ativar, significa que ativou anteriormente a API Pub/Sub para o seu projeto e não precisa de o fazer novamente.

Autenticar a sua app na Pub/Sub API

Tem de autenticar a sua app na API Pub/Sub. Esta secção aborda a autenticação para dois exemplos de utilização diferentes.

Para desenvolver ou testar a sua app localmente, recomendamos que use uma conta de serviço. Para ver instruções sobre como configurar uma conta de serviço e associá-la à sua app, leia o artigo Obter e fornecer credenciais da conta de serviço manualmente.

Para implementar a sua app no App Engine, não precisa de fornecer nenhuma nova autenticação. As Credenciais padrão da aplicação (ADC) deduzem os detalhes de autenticação para apps do App Engine.

Transferir a CLI do Google Cloud

Transfira e instale a CLI do Google Cloud para usar a CLI gcloud com a API Pub/Sub se não a tiver instalado anteriormente. Execute o seguinte comando a partir do terminal se já tiver a CLI do Google Cloud instalada.

gcloud components update

Importar as bibliotecas de cliente da nuvem

Siga as instruções do Pub/Sub para instalar a biblioteca cliente para usar a biblioteca cliente com a sua app.

Pub/Sub e filas de obtenção

Comparação de funcionalidades

O Pub/Sub envia trabalho para os trabalhadores através de uma relação publicador/subscritor. Uma subscrição de obtenção no Pub/Sub é como uma fila de obtenção nas filas de tarefas porque o subscritor obtém a mensagem do tópico. A tabela abaixo lista a funcionalidade principal das filas de obtenção nas filas de tarefas e a funcionalidade associada das subscrições de obtenção no Pub/Sub.

Funcionalidade de filas de tarefas Funcionalidade do Pub/Sub
Fila Tópico
Tarefa Mensagem
Worker Subscritor

Para saber mais acerca da arquitetura do Pub/Sub, leia o artigo Cloud Pub/Sub: A Google-Scale Messaging Service.

Comparação de fluxos de trabalho

Segue-se uma comparação de um fluxo de trabalho típico para uma fila de obtenção nas filas de tarefas e uma subscrição de obtenção no Pub/Sub.

Fluxo de trabalho das filas de tarefas Fluxo de trabalho do Pub/Sub
Cria a fila de obtenção Cria o tópico e subscreve o seu subscritor (ou seja, o trabalhador) no tópico
Cria e coloca a tarefa na fila Cria a mensagem e publica-a no tópico
O trabalhador arrenda a tarefa O subscritor extrai a mensagem do tópico
O trabalhador processa a tarefa O subscritor processa a mensagem
O trabalhador elimina a tarefa da fila O subscritor confirma a mensagem
O arrendamento expira O tópico elimina a mensagem quando todos os respetivos subscritores tiverem confirmado a receção da mensagem

Criar subscrições de obtenção no Pub/Sub

Pode usar uma subscrição de obtenção do Pub/Sub como uma fila de obtenção de filas de tarefas. As subscrições de um tópico não expiram e podem existir em simultâneo para vários trabalhadores. Isto significa que uma mensagem pode ser processada por mais do que um trabalhador, o que é um dos principais exemplos de utilização do Pub/Sub. Para recriar as filas de obtenção do Task Queues como subscrições de obtenção do Pub/Sub, crie um tópico para cada trabalhador e subscreva apenas o trabalhador associado ao tópico. Isto garante que cada mensagem é processada por exatamente um trabalhador, tal como nas filas de tarefas. Para saber como criar e gerir subscrições de obtenção, leia o artigo sobre a gestão de tópicos e subscrições.

Eliminar filas de obtenção

Depois de migrar as filas de obtenção do Task Queues para subscrições de obtenção do Pub/Sub, elimine-as do Task Queues através do ficheiro queue.yaml. Recomendamos que elimine cada fila de obtenção antes de migrar a seguinte. Isto impede que a sua app duplique o trabalho que recebe da nova subscrição de obtenção do Pub/Sub enquanto migra as outras filas de obtenção. Tenha em atenção que a eliminação das filas de obtenção do Task Queues uma a uma, em vez de numa única implementação, pode ter um efeito maior na sua quota de implementação do App Engine.

Depois de eliminar todas as filas de obtenção das filas de tarefas, pode omitir o ficheiro queue.yaml em implementações futuras da sua app.

Se a sua app usar apenas filas de obtenção, remova todas as referências à API Task Queues no seu código. Se a sua app usar filas de obtenção e filas de envio, pode remover as referências à API Task Queues que ocorrem em ficheiros que usam apenas filas de obtenção ou aguardar até ter migrado também as suas filas de envio e, em seguida, remover as referências à API Task Queues de todos os ficheiros.

O que se segue?