Como criar um sistema funcional do Cloud Pub/Sub

Introdução

Neste guia de início rápido, mostramos como configurar um conjunto simples de aplicativos que se comunicam enviando mensagens pelo Cloud Pub/Sub em vez de RPCs síncronos. Ao desacoplar aplicativos, as mensagens:

  • tornam os aplicativos mais robustos;
  • podem simplificar o desenvolvimento.

Por exemplo, o autor da chamada (editor) não precisa que o receptor (assinante) esteja ativo e disponível. Ele simplesmente envia uma mensagem ao Cloud Pub/Sub. O editor também não precisa saber quais e quantos aplicativos de assinante precisam receber a mensagem. Por isso, o serviço entrega a mensagem a um ou mais aplicativos de assinante sempre que eles estiverem disponíveis.

Este guia de início rápido é voltado a desenvolvedores Python que usam macOS.

Requisitos:

  • Uma Conta do Google
  • Um sistema macOS X com Python e Git instalados
  • Até uma hora para concluir

Visão geral do sistema

Neste guia início rápido, você inicia um aplicativo de editor que envia uma mensagem "Hello, World!" para dois assinantes, conforme ilustrado abaixo:

Diagrama do tópico, assinaturas anexadas e os aplicativos de editor e de assinante que enviam e recebem mensagens do Cloud Pub/Sub

Os dois aplicativos de assinante usam o mesmo código, mas são iniciados em momentos diferentes. Isso demonstra como o Cloud Pub/Sub viabiliza a comunicação assíncrona. Para construir o sistema, siga estas etapas:

  1. Crie o tópico e as assinaturas do Cloud Pub/Sub necessários.
  2. Crie uma conta de serviço que os aplicativos usam para autenticação.
  3. Configure as permissões do Cloud IAM.
  4. Inicie três aplicativos independentes: um editor e dois assinantes.

Configuração de início rápido

Configurar o projeto do GCP e o tópico e as assinaturas do Cloud Pub/Sub

  1. Faça login no Console do Google Cloud Platform.

    Acessar o Console do Google Cloud Platform

    Se você é novo no Cloud, clique em Ativar e siga os comandos para configurar sua conta do Cloud.

    No momento em que este guia de início rápido foi redigido, não havia custo pela primeira fração da cota de dados mensal gratuita. Consulte a página de preços do Cloud Pub/Sub para conhecer os detalhes. Este guia de início rápido também inclui instruções de limpeza.

  2. Selecione um projeto atual ou crie um novo. Um projeto padrão é criado na primeira vez em que você usa o GCP.

    Na seção Início do Console do GCP, anote o código do projeto. Esse valor é usado para definir seu projeto atual do Cloud Storage durante o processo de inicialização do SDK do Cloud. Esse código também é passado para o script do Python ao iniciar os aplicativos do editor e de assinante.

  3. Vá para a seção Cloud Pub/Sub do Console do Google Cloud Platform.

    Acessar a seção do Cloud Pub/Sub

    Siga o comando para ativar a API.

  4. Clique em Criar um tópico. Aplicativos de publicação enviam mensagens para tópicos. Use hello_topic como o Nome.

  5. Clique no nome do tópico e, em seguida, clique em Criar assinatura:

    1. O nome da assinatura precisa ser sub_one. Não altere nenhuma das configurações padrão. Você está criando uma assinatura StreamingPull, que é do tipo pull.

    2. Use o mesmo procedimento para criar outra assinatura anexada ao hello_topic, chamada sub_two.

      É possível clicar no nome do tópico na visualização Tópicos para ver as novas assinaturas. Também é possível alterar para a visualização Assinaturas.

Neste ponto, o ambiente do Cloud Pub/Sub já está pronto para gerenciar o fluxo de mensagens entre os aplicativos de publicação e assinatura do guia de início rápido.

Criar credenciais da conta de serviço

  1. Vá para a seção Contas de serviço do console.

    Acessar as contas de serviço do Cloud IAM

  2. Selecione seu projeto e clique em Criar conta de serviço.

  3. Informe um nome da conta de serviço, como pubsub-quickstart.

  4. Clique em Criar

  5. Para o guia de início rápido, a conta de serviço precisa de permissões de publicação e assinatura. Use a lista suspensa Selecione um papel para adicionar o papel Editor do Cloud Pub/Sub.

    Caixa de diálogo de permissões da conta de serviço, usando a string "pub" para filtrar os papéis do Cloud Pub/Sub

  6. Clique em Adicionar outro papel e adicione Assinante do Cloud Pub/Sub.

    Caixa de diálogo de permissões da conta de serviço, com o editor e o assinante Pub/Sub, antes de clicar no botão "Continuar"

  7. Clique em Continuar. Não é necessário conceder aos usuários acesso a essa conta de serviço.

  8. Clique em Criar chave. A chave é usada pela biblioteca de cliente para acessar a API Cloud Pub/Sub.

  9. Selecione JSON e clique em Criar.

    A chave é enviada para a pasta Downloads. Para os fins deste início rápido, deixe-o lá.

  10. Renomeie o arquivo de chave como ~/Downloads/key.json.

Instalar o SDK do Cloud

  1. Siga as instruções para instalar e inicializar o SDK do Cloud.

    • Ao inicializar o SDK do Cloud, selecione a opção para inserir um código de projeto e informe o código do projeto que você criou ou escolheu na seção de configuração.

    • Volte a este guia de início rápido depois de instalar e inicializar o SDK do Cloud. Não é necessário instalar outros componentes nem fazer o download das bibliotecas de cliente do Google Cloud.

    Depois de instalar o SDK do Cloud, use a ferramenta de linha de comando gcloud para executar as operações do Cloud Pub/Sub no Compute Engine.

  2. Inicie um novo terminal antes de usar estes comandos do gcloud:

    gcloud pubsub topics list
    gcloud pubsub subscriptions list
    

    Também é possível usar gcloud config set project PROJECT_ID para alterar o projeto a partir daquele que você configurou durante a inicialização.

Atualizar o Python e configurar um ambiente virtual

Este guia de início rápido apresenta um exemplo de uso. Portanto, não é necessário seguir o exemplo mostrado na seção de configuração do ambiente virtual. Volte a este guia de início rápido depois de instalar o ambiente virtual.

Ver o código do editor e do assinante

  1. Crie uma pasta de projeto para guardar os arquivos Python do Cloud Pub/Sub necessários para este início rápido. Em seguida, passe para ela e faça o download do código:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Feche todos os terminais abertos antes de continuar.

Configurar três terminais

  1. Inicie um terminal para cada aplicativo do início rápido (um editor e dois assinantes). Em cada um dos terminais, execute todas as operações listadas nesta seção. Por questões práticas, esses terminais serão chamados de:

    • terminal de editor: publisher;
    • terminal de assinante 1: sub_one;
    • terminal de assinante 2: sub_two.
  2. Crie um ambiente virtual do Python e o ative.

    • No primeiro terminal, execute este comando:

      virtualenv -- python python2.7 pyenv-qs && source pyenv-qs/bin/activate
    • Nos outros dois terminais, execute o seguinte comando:

      source pyenv-qs/bin/activate

    Depois de executar o comando de ativação, o prompt de comando precisa incluir (pyenv-qs) $.

    Observe que também é possível apontar seu ambiente virtual para uma versão diferente do Python.

  3. Garanta que você está usando o ambiente virtual conforme descrito no guia de configuração:

    pip install --upgrade google-cloud-pubsub

    Associe a chave JSON à conta de serviço. Você atribuiu os principais papéis do Cloud Pub/Sub quando criou as credenciais da conta de serviço.

    export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/key.json
  4. Configure uma variável de ambiente usando seu código de projeto atual. Este comando da gcloud define seu código de projeto atual e o configura como uma variável:

    export PROJECT=`gcloud config get-value project`

    Para verificar se o GCP atual foi registrado corretamente como essa variável, use este comando:

    echo $PROJECT
  5. Mude para a pasta do projeto e navegue até a pasta de exemplo do guia início rápido:

    cd python-docs-samples/pubsub/cloud-client/quickstart/
    

Iniciar os aplicativos e observar o fluxo de mensagens

Iniciar o aplicativo de assinante 1

No terminal sub_one, inicie o assinante 1:

python sub.py $PROJECT sub_one

Depois que ele for iniciado, o aplicativo pesquisa a assinatura sub_one do Cloud Pub/Sub.

O aplicativo de assinante 1 começa a detectar as mensagens na assinatura sub_one.

Iniciar o aplicativo de editor

No terminal publisher, inicie o aplicativo de editor:

python pub.py $PROJECT hello_topic
  • O aplicativo de editor envia uma mensagem "Hello, World!" para o Cloud Pub/Sub, mas não tem conhecimento das assinaturas atuais. O aplicativo também atribui uma identificação da mensagem.

  • O aplicativo de assinante 1 recebe a mensagem "Hello World", imprime-o e envia uma confirmação para o Cloud Pub/Sub.

  • O aplicativo de editor imprime a confirmação. A confirmação informa ao Cloud Pub/Sub que a mensagem foi processada com sucesso e não precisa ser reenviada para este ou qualquer outro assinante sub_one.

  • O Cloud Pub/Sub remove a mensagem do sub_one.

O aplicativo de editor publica a mensagem e atribui uma identificação de mensagem. O aplicativo de assinante 1 recebe a mensagem "Hello World" e envia uma confirmação

Iniciar o aplicativo de assinante 2

No terminal sub_two, inicie o assinante 2:

python sub.py $PROJECT sub_two

Este assinante recebe as mensagens entregues para a assinatura sub_ two. O assinante 2 reutiliza o script sub.py. A diferença é que o assinante 2 não é iniciado antes de o editor enviar a mensagem para o tópico e as assinaturas. Se o editor estivesse chamando o assinante 2 diretamente, o aplicativo de editor teria que aguardar até que o assinante 2 aparecesse. Caso contrário, ele expiraria. O Cloud Pub/Sub resolve isso efetivamente salvando a mensagem para o assinante 2.

O assinante 2 começa a realizar a detecção e recebe a mensagem que estava esperando por ele no sub_two

Agora você já consegue desenvolver com o Cloud Pub/Sub!

Como foi?

Outros recursos e links estão disponíveis na página de suporte do Cloud Pub/Sub.

Limpeza

  1. Interrompa todos os aplicativos em execução.

  2. Exclua o diretório ~/pubsub-quickstart do seu ambiente local.

  3. Encerre o projeto de início rápido na seção IAM e Admin do Console do Google Cloud Platform.

  4. Remova as credenciais da conta de serviço: rm ~/Downloads/key.json.

A seguir

Aqui estão algumas coisas para tentar:

  • Examine o código pub.py e sub.py do guia de início rápido e procure outras amostras do Cloud Pub/Sub no github. Como exercício, crie uma versão do pub.py que publique o horário local a cada segundo.

  • Aprenda a enviar mensagens em lote.

  • Processe assinaturas do Cloud Pub/Sub em grande escala com o Cloud Dataflow.

  • Use as assinaturas de Push para receber mensagens que acionam endpoints do App Engine ou Cloud Functions.

  • Recupere mensagens confirmadas anteriormente usando o recurso de reprodução. Por padrão, o Cloud Pub/Sub remove mensagens de assinaturas que foram confirmadas. Por exemplo, neste guia de início rápido, não é possível executar sub.py novamente para receber a mensagem "Hello, World!" de novo. O recurso de reprodução permite configurar assinaturas para que você possa receber mensagens depois que elas forem confirmadas.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Pub/Sub