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 os 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 ao 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 com a 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 esse sistema, siga estas etapas:
- Crie uma conta de serviço do IAM que os aplicativos usam para autenticação.
- Configure as permissões do IAM.
- Criar um tópico e uma assinatura do Pub/Sub.
- Inicie três aplicativos independentes: um editor e dois assinantes.
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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
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
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
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
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Instalar o Python
Este tutorial usa as bibliotecas de cliente do Pub/Sub, que exigem 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 a publicação e a assinatura de aplicativos, criar 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 as anexe ao tópico.
Essas assinaturas são StreamingPull, que é um tipo de assinatura de pull.
Assinatura 1
Crie uma assinatura com o ID sub_one
e anexe-a a 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
Fazer o download do código do editor e do assinante
Faça o download dos arquivos Python do Pub/Sub necessárias 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). Por conveniência, este tutorial chama estes terminais:
- terminal de editor: publisher;
- terminal de assinante 1: sub_one;
- terminal de assinante 2: sub_two.
No terminal do editor, 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 que você executar o comando "activate", o prompt de comando incluirá o seguinte: o valor
(pyenv-qs) $
.No terminal do editor, instale a biblioteca de cliente Python do Pub/Sub usando
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 o define como uma variável:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
Nos 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 de editor 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 do exemplo de código do ambiente local.
Exclua o tópico.
gcloud pubsub topics delete hello_topic
Excluir as assinaturas.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Encerre o projeto do tutorial na seção IAM e administrador do console do Google Cloud.
-
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
A seguir
Aqui estão algumas coisas para tentar:
Examine os códigos
pub.py
esub.py
do tutorial e navegue por outros Exemplos do Pub/Sub no GitHub. Como exercício, crie uma versão depub.py
que 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 Execute
sub.py
novamente para receber a mensagem "Hello, World!" mensagem novamente. O recurso de reprodução permite configurar assinaturas para que você possa receber mensagens depois que elas forem confirmadas.Comece a usar bibliotecas de cliente em outras linguagens.