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
Nesta seção, discutimos tópicos que você precisa abordar antes de migrar suas 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. Veja instruções sobre como configurar uma conta de serviço e conectá-la ao aplicativo em Como receber e fornecer credenciais da 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 a biblioteca de cliente do Python
Siga as etapas abaixo para usar a biblioteca de cliente Pub/Sub Python com seu aplicativo do App Engine:Crie um diretório para armazenar bibliotecas de terceiros, como
lib/
.mkdir lib
Copie as bibliotecas necessárias.
Recomendamos usar um arquivo de requisitos
pip
em vez de instalar as bibliotecas uma de cada vez a partir da linha de comando. Crie um arquivorequirements.txt
na mesma pasta que seu arquivoapp.yaml
, se ainda não houver um arquivorequirements.txt
. Adicione a linha abaixo:google-cloud-pubsub
Use
pip
(versão 6 ou posterior) com a sinalização-t <directory>
para copiar a biblioteca do Pub/Sub especificada no arquivorequirements.txt
para a pasta criada na etapa anterior. Por exemplo:pip install -t lib -r requirements.txt
Especifique a biblioteca RPC na seção
libraries
do arquivoapp.yaml
:libraries: - name: grpcio version: 1.0.0
Use o módulo
pkg_resources
para garantir que o aplicativo use a distribuição correta da biblioteca de cliente Python do Pub/Sub.Crie um arquivo
appengine_config.py
na mesma pasta que seu arquivoapp.yaml
, se você ainda não tiver um. Adicione a instrução a seguir ao arquivoappengine_config.py
:# appengine_config.py 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, é possível passar 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_v1
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.