Neste tutorial, você verá como configurar um conjunto de aplicativos que se comunicam enviando mensagens pelo Pub/Sub em vez de RPCs síncronos. Com a separação dos 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 Pub/Sub. O editor também não precisa saber quais e quantos aplicativos de assinante precisam receber a mensagem. Como resultado, o serviço pode ser confiável para entregar a mensagem a um ou mais aplicativos do assinante sempre que 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 esse sistema, conclua as seguintes 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 do Pub/Sub e uma assinatura.
- 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 agora, 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.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative a API Pub/Sub:
gcloud services enable pubsub.googleapis.com
-
Crie as credenciais de autenticação para sua Conta do Google:
gcloud auth application-default login
-
Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Substitua
PROJECT_ID
pela ID do seu projeto. - Substitua
EMAIL_ADDRESS
pelo seu endereço de e-mail. - Substitua
ROLE
por cada papel individual.
- Substitua
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative a API Pub/Sub:
gcloud services enable pubsub.googleapis.com
-
Crie as credenciais de autenticação para sua Conta do Google:
gcloud auth application-default login
-
Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Substitua
PROJECT_ID
pela ID do seu projeto. - Substitua
EMAIL_ADDRESS
pelo seu endereço de e-mail. - Substitua
ROLE
por cada papel individual.
- Substitua
Instalar o Python
Neste tutorial, usamos as bibliotecas de cliente do Pub/Sub, que exigem o Python 3.7 ou versão 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, crie 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 uma assinatura StreamingPull, que é um tipo de assinatura 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 de um para muitos
Fazer o download do código de editor e de 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). 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 publisher, crie e ative um ambiente virtual 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 enable, o prompt de comando incluirá o valor
(pyenv-qs) $
a seguir.No terminal publisher, 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 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)
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.
Limpar
- Interrompa todos os aplicativos em execução.
- Exclua o diretório de código de exemplo do seu 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 de tutorial na seção IAM e administrador do console do 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.py
esub.py
do tutorial e procure outras amostras 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. Por exemplo, neste tutorial, não é possível executar novamente o
sub.py
para receber a mensagem "Hello, World!" outra vez. O recurso de repetição permite configurar assinaturas para que você possa receber mensagens depois que elas forem confirmadas.Comece a usar bibliotecas de cliente em outras linguagens.