Nesta página, explicamos como migrar o código da fila pull de Task Queues para o Pub/Sub. O Pub/Sub agora é a maneira preferencial de executar o trabalho da fila pull no App Engine.
Se o aplicativo usa filas pull e filas push, use este guia para migrar filas pull para o Pub/Sub antes de migrar suas filas push para o novo serviço de filas push Cloud Tasks. A migração de filas pull após a migração de filas push para o Cloud Tasks não é recomendada porque o uso obrigatório do arquivo queue.yaml
provavelmente causa um comportamento inesperado com o Cloud Tasks.
Recursos não disponíveis no Pub/Sub
Os seguintes recursos do Task Queues não estão disponíveis atualmente no Pub/Sub:
- Lote por tag
- Desduplicação automática
Preços e cotas
Migrar suas filas pull para Pub/Sub pode afetar o preço e as cotas do seu aplicativo.
Preços
Pub/Sub tem seu próprio preço. Assim como no Task Queues, o envio de solicitações para o aplicativo do App Engine com o Pub/Sub pode gerar custos.
Cotas
As cotas do Pub/Sub são diferentes das cotas do Task Queues. Assim como no Task Queues, o envio de solicitações para o aplicativo App Engine a partir do Pub/Sub pode afetar as cotas de solicitação do App Engine.
Antes de migrar
Se você ainda não tiver feito isso, configure o ambiente de desenvolvimento do Python para usar uma versão do Python compatível com o Google Cloud e instale ferramentas de teste para criar Python isolado.As seções a seguir discutem as etapas de configuração que antecedem a migração de filas pull para o Pub/Sub.
Como ativar a API Pub/Sub
Para ativar a API Pub/Sub, clique em Ativar na API Pub/Sub na Biblioteca de APIs. Se você vir um botão Gerenciar em vez de um botão Ativar, isso significará que a API Pub/Sub já está ativada para seu projeto.
Como autenticar seu aplicativo na API Pub/Sub
É necessário autenticar seu aplicativo para a API Pub/Sub. Nesta seção, discutimos a autenticação para dois casos de uso diferentes.
Para desenvolver ou testar seu aplicativo localmente, recomendamos usar uma conta de serviço. Consulte as instruções sobre como configurar uma conta de serviço e conectá-la ao aplicativo em Como receber e fornecer credenciais de conta de serviço manualmente.
Para implantar o aplicativo no App Engine, você não precisa fornecer nenhuma nova autenticação. As Application Default Credentials (ADC, na sigla em inglês) inferem detalhes de autenticação de aplicativos do App Engine.
Como fazer o download da Google Cloud CLI
Faça o download e instale a Google Cloud CLI para usar a CLI gcloud com a API Pub/Sub, se ainda não tiver sido instalada. Se já tiver a Google Cloud CLI instalada, execute o seguinte comando no terminal:
gcloud components update
Como importar as bibliotecas de cliente do Cloud
Siga as etapas abaixo para usar a biblioteca de cliente Python do Pub/Sub com seu aplicativo atual do App Engine:
Atualize o arquivo
app.yaml
. Siga as instruções para sua versão do Python:Python 2
Para aplicativos Python 2, adicione as versões mais recentes da biblioteca
grpcio
.A seguir, um exemplo de arquivo
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest
Python 3
Para aplicativos Python 3, especifique o elemento
runtime
no arquivoapp.yaml
com uma versão compatível do Python 3. Por exemplo:runtime: python310 # or another support version
O ambiente de execução do Python 3 instala bibliotecas automaticamente. Portanto, não é necessário especificar bibliotecas integradas do ambiente de execução anterior do Python 2. Se o aplicativo Python 3 estiver usando outros serviços legados em pacote durante a migração, será possível especificar as bibliotecas integradas necessárias. Caso contrário, exclua as linhas desnecessárias do arquivo
app.yaml
.Atualize o arquivo
requirements.txt
. Siga as instruções para sua versão do Python:Python 2
Adicione as bibliotecas de cliente do Cloud para Pub/Sub à lista de dependências no arquivo
requirements.txt
.google-cloud-pubsub
Em seguida, execute
pip install -t lib -r requirements.txt
para atualizar a lista de bibliotecas disponíveis para seu app.Python 3
Adicione as bibliotecas de cliente do Cloud para Pub/Sub à lista de dependências no arquivo
requirements.txt
.google-cloud-pubsub
O App Engine instala automaticamente essas dependências durante a implantação do app no ambiente de execução do Python 3. Portanto, exclua a pasta
lib
, se houver uma.No caso de um aplicativo Python 2, se ele estiver usando bibliotecas integradas ou copiadas, especifique esses caminhos no arquivo
appengine_config.py
, localizado na mesma pasta do arquivoapp.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 arquivo
appengine_config.py
acima pressupõe que o diretório de trabalho atual seja o local da pastalib
. Em alguns casos, como testes de unidade, o diretório de trabalho atual pode ser diferente. Para evitar erros, transmita explicitamente o caminho completo para a pastalib
usando:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importe a biblioteca de cliente Python do Pub/Sub em qualquer arquivo que use filas pull da API Task Queues:
from google.cloud import pubsub
Filas do Pub/Sub e pull
Comparação do recurso
O Pub/Sub envia trabalho aos workers por meio de uma relação de editor/assinante. Uma assinatura pull no Pub/Sub é como uma fila pull em Task Queues porque o assinante extrai a mensagem do tópico. Na tabela abaixo, listamos o recurso principal para filas pull em Task Queues e o recurso associado para assinaturas de pull em Pub/Sub.
Recurso Task Queues | Recurso do Pub/Sub |
---|---|
Fila | Tópico |
Tarefa | Mensagem |
Worker | Inscrito |
Para saber mais sobre a arquitetura do Pub/Sub, leia Cloud Pub/Sub: um serviço de mensagens em escala do Google.
Comparação do fluxo de trabalho
Veja abaixo uma comparação de um fluxo de trabalho típico para uma fila pull no Task Queues e uma assinatura pull em Pub/Sub.
Fluxo de trabalho do Task Queues | Fluxo de trabalho do Pub/Sub |
---|---|
Você cria a fila pull | Você cria o tópico e inscreve seu assinante (isto é, worker) no tópico |
Você cria e enfileira a tarefa | Você cria a mensagem e a pública no tópico |
O worker aluga a tarefa | O assinante extrai a mensagem do tópico |
O worker processa a tarefa | O assinante processa a mensagem |
O worker exclui a tarefa da fila | O assinante reconhece a mensagem |
A locação expira | O tópico exclui a mensagem quando todos os assinantes a reconhecem |
Como criar assinaturas de pull no Pub/Sub
É possível usar uma assinatura de pull do Pub/Sub como uma fila pull do Task Queues. As assinaturas de um tópico não expiram e podem existir simultaneamente para vários workers. Isso significa que uma mensagem pode ser processada por mais de um worker, que é um dos principais casos de uso do Pub/Sub. Para recriar filas pull de Task Queues como assinaturas de pull do Pub/Sub, crie um tópico para cada worker e faça a assinatura apenas do worker associado no tópico. Isso garante que cada mensagem seja processada por exatamente um worker, como em Task Queues. Para mais informações sobre como criar e gerenciar assinaturas de pull, leia sobre como gerenciar tópicos e assinaturas.
Como excluir filas pull
Depois de migrar filas pull de Task Queues para assinaturas de pull do Pub/Sub, exclua-as do Task Queues usando o arquivo queue.yaml
. Recomendamos excluir cada fila pull antes de migrar a próxima. Isso impede que seu aplicativo duplique o trabalho recebido da nova assinatura de pull Pub/Sub enquanto você migra suas outras filas pull. A exclusão de filas pull de Task Queues individualmente, em vez de em uma única implantação, pode ter um efeito maior sobre sua cota de implantação do App Engine.
Depois da exclusão de todas as suas filas pull de Task Queues, será possível omitir o arquivo queue.yaml
de implantações futuras do seu aplicativo.
Se o aplicativo usar apenas filas pull, remova todas as referências à API Task Queues no seu código. Se seu aplicativo usar filas pull e push, será possível remover as referências à API Task Queues que ocorrem em arquivos que só usam filas pull ou aguardar até que também tenha migrado suas filas push e remova referências à API Task Queues de todos os arquivos.
A seguir
- Documentação do Pub/Sub
- Como migrar filas push
- Para ver um tutorial prático, consulte o codelab Migrar as filas pull da fila de tarefas do App Engine para o Pub/Sub.