Neste tutorial, mostramos como configurar um conjunto de aplicativos que se comunicam enviando mensagens pelo 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. O editor envia uma mensagem para o Pub/Sub. O editor 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.
Visão geral do sistema
Neste tutorial, você inicia um aplicativo de editor que envia uma mensagem "Hello, World!" para dois assinantes usando a comunicação um para muitos, conforme ilustrado no diagrama a seguir:
Os dois aplicativos de assinante usam o mesmo código, mas são iniciados em momentos diferentes. Esse processo demonstra como o Pub/Sub permite a comunicação assíncrona. Para criar o sistema, siga estas etapas:
- Crie uma conta de serviço do IAM que os aplicativos usem para autenticação.
- Configure as permissões do IAM.
- Crie um tópico e uma assinatura do Pub/Sub.
- Inicie três aplicativos independentes: um editor e dois assinantes.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Habilitar a API Pub/Sub:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable pubsub.googleapis.com
-
Crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Atribua papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/pubsub.publisher, roles/pubsub.subscribergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM concedido à sua conta de usuário.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Habilitar a API Pub/Sub:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.gcloud services enable pubsub.googleapis.com
-
Crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.
-
Atribua papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/pubsub.publisher, roles/pubsub.subscribergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Por exemplo,myemail@example.com.ROLE: o papel do IAM concedido à sua conta de usuário.
Instalar o Python
Este tutorial usa as bibliotecas de cliente do Pub/Sub, que exigem o Python 3.7 ou mais recente. Siga as instruções para instalar o Python.
Configurar seu projeto do Pub/Sub
Para gerenciar o fluxo de mensagens entre aplicativos de publicação e assinatura, você cria um tópico e duas assinaturas diferentes.
Criar um tópico do Pub/Sub
Crie um tópico com o ID hello_topic:
gcloud pubsub topics create hello_topic
Criar assinaturas do Pub/Sub
Crie duas assinaturas e anexe-as ao tópico.
Essas assinaturas são do tipo StreamingPull, que é um tipo de assinatura de pull.
Assinatura 1
Crie uma assinatura com o ID sub_one e anexe-a ao hello_topic.
gcloud pubsub subscriptions create sub_one --topic=hello_topic
Assinatura 2
Crie uma assinatura com o ID sub_two e anexe-a ao hello_topic.
gcloud pubsub subscriptions create sub_two --topic=hello_topic
Criar o sistema um para muitos
Baixar o código do editor e do assinante
Faça o download dos arquivos 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.
Configurar três terminais
Inicie um terminal para cada aplicativo do tutorial (um editor e dois assinantes). Para facilitar, este tutorial chama esses terminais de:
- terminal de editor: publisher;
- terminal de assinante 1: sub_one;
- terminal de assinante 2: sub_two.
No terminal do publisher, crie e ative um ambiente virtual do Python chamado
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, o prompt de comando vai incluir o seguinte valor
(pyenv-qs) $.No terminal publisher, instale a biblioteca de cliente Python do Pub/Sub usando
pip:python -m pip install --upgrade google-cloud-pubsub
Em todos os três terminais, configure uma variável de ambiente com o ID do projeto atual. Este comando da gcloud determina o ID do projeto selecionado e o define 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 exemplo de código.
cd python-pubsub/samples/snippets/quickstart/
Iniciar os aplicativos e observar o fluxo de mensagens
Iniciar o aplicativo de assinante 1
No terminal sub_one, inicie o assinante 1:
Bash
python sub.py $PROJECT sub_one
PowerShell
py sub.py $env:PROJECT sub_one
Depois de iniciado, o aplicativo abre uma conexão de streaming bidirecional com o servidor. O Pub/Sub entrega mensagens no stream.

Iniciar o aplicativo de editor
No terminal publisher, inicie o aplicativo de editor:
Bash
python pub.py $PROJECT hello_topic
PowerShell
py pub.py $env:PROJECT hello_topic
Depois que o aplicativo do editor é iniciado, o sistema Pub/Sub faz o seguinte:
O aplicativo de editor envia uma mensagem "Hello, World!" para o Pub/Sub sem saber se há assinaturas existentes. O servidor também atribui um ID da mensagem.
O aplicativo de assinante 1 recebe a mensagem "Hello World", imprime-o e envia uma confirmação para o Pub/Sub.
O aplicativo Publisher imprime a confirmação. A confirmação informa ao Pub/Sub que a mensagem foi processada com sucesso e não precisa ser reenviada para este ou qualquer outro assinante sub_one.
O Pub/Sub remove a mensagem do sub_one.

Iniciar o aplicativo de assinante 2
No terminal sub_two, inicie o assinante 2:
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env: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 Pub/Sub gerencia esse processo efetivamente salvando a mensagem para o assinante 2.

Agora você já consegue desenvolver com o Pub/Sub!
Como foi?
Outros recursos e links estão disponíveis na página de suporte do Pub/Sub.
Limpeza
- Interrompa todos os aplicativos em execução.
- Exclua o diretório de exemplo de código do ambiente local.
Exclua o tópico.
gcloud pubsub topics delete hello_topic
Exclua as assinaturas.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Desligue o projeto do tutorial na seção IAM e administrador do console Google Cloud .
-
Opcional: revogue as credenciais de autenticação que você criou e exclua o arquivo de credenciais local:
gcloud auth application-default revoke
-
Opcional: revogar credenciais da CLI gcloud.
gcloud auth revoke
A seguir
Aqui estão algumas coisas para tentar:
Examine os códigos
pub.pyesub.pydo tutorial e procure outras amostras do Pub/Sub no GitHub. Como exercício, crie uma versão depub.pyque publique o horário local a cada segundo.Aprenda a enviar mensagens em lote.
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 Pub/Sub remove das assinaturas as mensagens confirmadas. Neste tutorial, por exemplo, não seria possível executar
sub.pynovamente para receber a mensagem "Hello, World!" outra vez. O recurso de reprodução permite configurar assinaturas para que você possa receber mensagens depois que elas forem confirmadas.Comece a usar as bibliotecas de cliente em outros idiomas.