Como migrar filas pull para o Pub/Sub

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:

  1. Crie um diretório para armazenar bibliotecas de terceiros, como lib/.

    mkdir lib
  2. 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 arquivo requirements.txt na mesma pasta que seu arquivo app.yaml, se ainda não houver um arquivo requirements.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 arquivo requirements.txt para a pasta criada na etapa anterior. Por exemplo:

    pip install -t lib -r requirements.txt
    
  3. Especifique a biblioteca RPC na seção libraries do arquivo app.yaml:

    libraries:
    - name: grpcio
      version: 1.0.0
    
  4. 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 arquivo app.yaml, se você ainda não tiver um. Adicione a instrução a seguir ao arquivo appengine_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 pasta lib. 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 pasta lib usando:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    
  5. 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.

A seguir