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
Se ainda não o fez, configure o seu ambiente de desenvolvimento Python para usar uma versão do Python compatível com o Google Cloude instale ferramentas de teste para criar ambientes Python isolados.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 os passos abaixo para usar a biblioteca cliente Python do Pub/Sub com a sua app do App Engine existente:
Atualize o ficheiro
app.yaml
. Siga as instruções para a sua versão do Python:Python 2
Para apps Python 2, adicione as versões mais recentes da biblioteca
grpcio
.Segue-se um exemplo de um ficheiro
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest
Python 3
Para apps Python 3, especifique o elemento
runtime
no ficheiroapp.yaml
com uma versão do Python 3 suportada. Por exemplo:runtime: python310 # or another support version
O tempo de execução do Python 3 instala bibliotecas automaticamente, pelo que não tem de especificar bibliotecas incorporadas do tempo de execução do Python 2 anterior. Se a sua app Python 3 estiver a usar outros serviços incluídos legados durante a migração, pode continuar a especificar as bibliotecas incorporadas necessárias. Caso contrário, pode eliminar as linhas desnecessárias no ficheiro
app.yaml
.Atualize o ficheiro
requirements.txt
. Siga as instruções para a sua versão do Python:Python 2
Adicione as bibliotecas de cliente da nuvem para o Pub/Sub à sua lista de dependências no ficheiro
requirements.txt
.google-cloud-pubsub
Em seguida, execute
pip install -t lib -r requirements.txt
para atualizar a lista de bibliotecas disponíveis para a sua app.Python 3
Adicione as bibliotecas de cliente da nuvem para o Pub/Sub à sua lista de dependências no ficheiro
requirements.txt
.google-cloud-pubsub
O App Engine instala automaticamente estas dependências durante a implementação da app no runtime do Python 3. Por isso, elimine a pasta
lib
, se existir.Para apps Python 2, se a sua app estiver a usar bibliotecas incorporadas ou copiadas, tem de especificar esses caminhos no ficheiro
appengine_config.py
, localizado na mesma pasta que o ficheiroapp.yaml
:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)
O ficheiro
appengine_config.py
acima pressupõe que o diretório de trabalho atual é onde se encontra a pastalib
. Em alguns casos, como os testes unitários, o diretório de trabalho atual pode ser diferente. Para evitar erros, pode transmitir explicitamente o caminho completo para a pastalib
através do seguinte:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importe a biblioteca cliente Python do Pub/Sub em todos os ficheiros que usam filas de obtenção da API Task Queues:
from google.cloud import pubsub
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?
- Documentação do Pub/Sub
- Migrar filas de envio
- Para um tutorial prático, consulte o codelab de migração das filas de obtenção do App Engine Task Queue para o Pub/Sub.