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:
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:
- Crie uma conta de serviço do IAM que as aplicações usem para autenticação.
- Configure as autorizações de IAM.
- Crie um tópico e uma subscrição do Pub/Sub.
- Inicie três aplicações independentes: um publicador e dois subscritores.
Antes de começar
- 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.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable pubsub.googleapis.com
-
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.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscribergcloud 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.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable pubsub.googleapis.com
-
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.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscribergcloud 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.
Transfira os ficheiros Python do Pub/Sub necessários para este tutorial.
git clone https://github.com/googleapis/python-pubsub.git
Feche todos os terminais abertos antes de continuar.
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
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) $.No terminal do publicador, instale a biblioteca cliente Python do Pub/Sub com o comando
pip:python -m pip install --upgrade google-cloud-pubsub
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)
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/
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.
- Pare todas as aplicações em execução.
- Elimine o diretório de código de exemplo do seu ambiente local.
Elimine o tópico.
gcloud pubsub topics delete hello_topic
Eliminar as subscrições.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Encerre o projeto do tutorial na secção IAM e administração da Google Cloud consola.
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
Examine o código
pub.pyesub.pydo tutorial e procure outros exemplos do Pub/Sub no GitHub. Como exercício, crie uma versão depub.pyque 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.pypara 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.
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
Configure três terminais
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.

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:
O Pub/Sub remove a mensagem de sub_one.

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.

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
O que se segue?
Seguem-se algumas sugestões que pode experimentar: