Crie um sistema Pub/Sub de um para muitos

Este tutorial explica como configurar um conjunto de aplicações que comunicam através do envio de mensagens através do Pub/Sub em vez de RPCs síncronos. Ao desassociar as aplicações, as mensagens:

  • Torna as aplicações mais robustas
  • Pode simplificar o desenvolvimento

Por exemplo, o autor da chamada (publicador) não precisa que o destinatário (subscritor) esteja disponível. O publicador envia uma mensagem para o Pub/Sub. O publicador não precisa de saber que apps de subscrição e quantas têm de receber a mensagem. Como resultado, pode confiar no serviço para entregar a mensagem a uma ou mais aplicações subscritas sempre que estiverem disponíveis.

Vista geral do sistema

Neste tutorial, inicia uma aplicação de publicador que envia uma mensagem "Olá, mundo!" a dois subscritores através da comunicação um-para-muitos, conforme ilustrado no diagrama seguinte:

Diagrama do tópico, das respetivas subscrições anexas e das aplicações de publicador e subscritor que enviam mensagens para o Cloud Pub/Sub e recebem mensagens do mesmo

As duas aplicações de subscrição usam o mesmo código, mas inicia-as em momentos diferentes. Este processo demonstra como o Pub/Sub permite a comunicação assíncrona. Para criar este sistema, conclua os seguintes passos:

  1. Crie uma conta de serviço do IAM que as aplicações usem para autenticação.
  2. Configure as autorizações de IAM.
  3. Crie um tópico e uma subscrição do Pub/Sub.
  4. Inicie três aplicações independentes: um publicador e dois subscritores.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Pub/Sub API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable pubsub.googleapis.com
  8. Create local authentication credentials for your user account:

    gcloud auth application-default login

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  9. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  10. Install the Google Cloud CLI.

  11. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  12. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  13. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  14. Verify that billing is enabled for your Google Cloud project.

  15. Enable the Pub/Sub API:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable pubsub.googleapis.com
  16. Create local authentication credentials for your user account:

    gcloud auth application-default login

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  17. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  18. Instale o Python

    Este tutorial usa as bibliotecas cliente do Pub/Sub, que requerem o Python 3.7 ou superior. Conclua as instruções para instalar o Python.

    Configure o seu projeto Pub/Sub

    Para gerir o fluxo de mensagens entre aplicações de publicação e subscrição, pode criar um tópico e duas subscrições diferentes.

    Crie um tópico do Pub/Sub

    Crie um tópico com o ID hello_topic:

    gcloud pubsub topics create hello_topic

    Crie subscrições do Pub/Sub

    Crie duas subscrições e anexe-as ao seu tópico.

    Estas subscrições são uma subscrição StreamingPull, que é um tipo de subscrição pull.

    Subscrição 1

    Crie uma subscrição com o ID sub_one e anexe-a a hello_topic.

    gcloud pubsub subscriptions create sub_one --topic=hello_topic

    Subscrição 2

    Crie uma subscrição com o ID sub_two e anexe-a a hello_topic.

    gcloud pubsub subscriptions create sub_two --topic=hello_topic

    Crie o sistema de um para muitos

    Transfira o código do publicador e do subscritor

    1. Transfira os ficheiros Python do Pub/Sub necessários para este tutorial.

       git clone https://github.com/googleapis/python-pubsub.git
    2. Feche todos os terminais abertos antes de continuar.

    Configure três terminais

    1. Inicie um terminal para cada aplicação de tutorial (um publicador e dois subscritores). Para maior comodidade, este tutorial denomina estes terminais:

      • terminal do publicador
      • Terminal sub_one
      • Terminal sub_two
    2. No terminal do publicador, crie e ative um ambiente virtual do Python denominado pyenv-qs.

      Bash

      python -m venv pyenv-qs
      source pyenv-qs/bin/activate

      PowerShell

      py -m venv pyenv-qs
      .\pyenv-qs\Scripts\activate

      Nos terminais sub_one e sub_two, execute o seguinte comando:

      Bash

      source pyenv-qs/bin/activate

      PowerShell

      .\pyenv-qs\Scripts\activate

      Depois de executar o comando de ativação, a linha de comandos inclui o seguinte valor (pyenv-qs) $.

    3. No terminal do publicador, instale a biblioteca cliente Python do Pub/Sub com o comando pip:

      python -m pip install --upgrade google-cloud-pubsub
    4. Nos três terminais, configure uma variável de ambiente com o ID do projeto atual. Este comando gcloud determina o ID do projeto selecionado e define-o como uma variável:

      Bash

      export PROJECT=`gcloud config get-value project`

      PowerShell

      $env:PROJECT=$(gcloud config get-value project)
    5. Em todos os três terminais, mude para o caminho do projeto que contém o código de exemplo.

      cd python-pubsub/samples/snippets/quickstart/

    Inicie as apps e observe o fluxo de mensagens

    Inicie a aplicação do subscritor 1

    No terminal sub_one, inicie o Subscritor 1:

    Bash

    python sub.py $PROJECT sub_one

    PowerShell

    py sub.py $env:PROJECT sub_one

    Depois de iniciada, esta aplicação abre uma ligação de streaming bidirecional com o servidor. O Pub/Sub envia mensagens através da stream.

    A aplicação do subscritor 1 começa a ouvir mensagens na subscrição sub_one.

    Inicie a aplicação Publisher

    No terminal do publicador, inicie a aplicação Publisher:

    Bash

    python pub.py $PROJECT hello_topic

    PowerShell

    py pub.py $env:PROJECT hello_topic

    Depois de a aplicação do publicador ser iniciada, o sistema Pub/Sub faz o seguinte:

    • A aplicação Publisher envia uma mensagem "Hello, World!" para o Pub/Sub sem ter conhecimento de quaisquer subscrições existentes. O servidor também atribui um ID da mensagem.

    • A aplicação Subscritor 1 recebe a mensagem "Olá, mundo", imprime-a e envia uma confirmação para o Pub/Sub.

    • A aplicação Publisher imprime a confirmação. O reconhecimento indica ao Pub/Sub que a mensagem foi processada com êxito e que não precisa de ser reenviada a este nem a nenhum outro subscritor de sub_one.

    O Pub/Sub remove a mensagem de sub_one.

    A aplicação Publisher
  publica a mensagem e atribui um ID de mensagem. A aplicação Subscriber 1 recebe a mensagem "Hello World" e envia uma confirmação

    Inicie a aplicação Subscriber 2

    No terminal sub_two, inicie o Subscritor 2:

    Bash

    python sub.py $PROJECT sub_two

    PowerShell

    py sub.py $env:PROJECT sub_two

    Este subscritor recebe mensagens entregues na subscrição sub_two. O subscritor 2 reutiliza o script sub.py. A diferença é que Subscriber 2 não é iniciado até o publicador enviar a mensagem para o tópico e as subscrições. Se o Publicador estivesse a chamar o Subscritor 2 diretamente, a aplicação de publicação teria de esperar até que o Subscritor 2 aparecesse ou teria de expirar. O Pub/Sub gere este processo guardando eficazmente a mensagem para o subscritor 2.

    O subscritor 2
  começa a ouvir e recebe a mensagem que estava à sua espera em
  sub_two

    Já pode desenvolver com o Pub/Sub!

    Como correu?

    Estão disponíveis recursos e links adicionais na página de apoio técnico do Pub/Sub.

    Limpar

    1. Pare todas as aplicações em execução.
    2. Elimine o diretório de código de exemplo do seu ambiente local.
    3. Elimine o tópico.

      gcloud pubsub topics delete hello_topic
    4. Eliminar as subscrições.

      gcloud pubsub subscriptions delete sub_one
      gcloud pubsub subscriptions delete sub_two
    5. Encerre o projeto do tutorial na secção IAM e administração da Google Cloud consola.

    6. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

      gcloud auth application-default revoke
    7. Optional: Revoke credentials from the gcloud CLI.

      gcloud auth revoke

    O que se segue?

    Seguem-se algumas sugestões que pode experimentar:

    • Examine o código pub.py e sub.py do tutorial e procure outros exemplos do Pub/Sub no GitHub. Como exercício, crie uma versão de pub.py que publique a hora local a cada segundo.

    • Saiba como enviar mensagens em lote.

    • Com as subscrições Push, recebe mensagens que acionam pontos finais do App Engine ou Cloud Functions.

    • Recuperar mensagens reconhecidas anteriormente através da opção replay. Por predefinição, o Pub/Sub remove as mensagens reconhecidas das subscrições. Neste tutorial, por exemplo, não pode executar novamente sub.py para receber a mensagem "Olá, mundo!". A funcionalidade de repetição permite-lhe configurar subscrições para poder receber mensagens depois de terem sido confirmadas.

    • Comece a usar bibliotecas cliente noutros idiomas.