Questo tutorial illustra la configurazione di un insieme di applicazioni che si comunicano inviando messaggi tramite Pub/Sub anziché RPC sincrone. Se scolleghi le applicazioni, la messaggistica:
- Rende le applicazioni più affidabili
- Potrebbe semplificare lo sviluppo
Ad esempio, chi chiama (editore) non ha bisogno che il destinatario (abbonato) sia attivo e disponibile. Il publisher invia un messaggio a Pub/Sub. Il publisher non deve sapere quali e quante applicazioni di abbonati devono ricevere il messaggio. Di conseguenza, il servizio può essere considerato attendibile per quanto riguarda il recapito del messaggio a una o più applicazioni degli abbonati ogni volta che sono disponibili.
Panoramica del sistema
In questo tutorial avvii un'applicazione publisher che invia un messaggio "Hello, World!" a due sottoscrittori utilizzando la comunicazione one-to-many, come illustrato nel seguente diagramma:
Le due applicazioni di abbonamento utilizzano lo stesso codice, ma le avvii in momenti diversi. Questa procedura mostra come Pub/Sub consente la comunicazione asincrona. Per creare questo sistema, segui questi passaggi:
- Crea un account di servizio IAM utilizzato dalle applicazioni per l'autenticazione.
- Configura le autorizzazioni IAM.
- Crea un argomento Pub/Sub e una sottoscrizione.
- Avvia tre applicazioni indipendenti: un publisher e due sottoscrittori.
Prima di iniziare
- 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
Installa Python
Questo tutorial utilizza le librerie client Pub/Sub, che richiedono Python 3.7 o versioni successive. Segui le istruzioni per installare Python.
Configura il progetto Pub/Sub
Per gestire il flusso di messaggi tra le applicazioni di pubblicazione e di sottoscrizione, crea un argomento e due sottoscrizioni diverse.
crea un argomento Pub/Sub
Crea un argomento con ID hello_topic
:
gcloud pubsub topics create hello_topic
Creare sottoscrizioni Pub/Sub
Crea due sottoscrizioni e collegale all'argomento.
Questi abbonamenti sono di tipo StreamingPull, ovvero un tipo di abbonamento pull.
Sottoscrizione 1
Crea una sottoscrizione con l'ID sub_one
e collegala a hello_topic
.
gcloud pubsub subscriptions create sub_one --topic=hello_topic
Abbonamento 2
Crea una sottoscrizione con l'ID sub_two
e collegala a hello_topic
.
gcloud pubsub subscriptions create sub_two --topic=hello_topic
Crea il sistema one-to-many
Scarica il codice publisher e dell'abbonato
Scarica i file Python di Pub/Sub necessari per questo tutorial.
git clone https://github.com/googleapis/python-pubsub.git
Chiudi tutti i terminali aperti prima di procedere.
Configura tre terminali
Avvia un terminale per ogni applicazione del tutorial (un publisher e due abbonati). Per praticità, questo tutorial chiama questi terminali:
- Terminale publisher
- Terminale sub_one
- Terminale sub_two
Nel terminale del publisher, crea e attiva un ambiente virtuale Python denominato
pyenv-qs
.Bash
python -m venv pyenv-qs source pyenv-qs/bin/activate
PowerShell
py -m venv pyenv-qs .\pyenv-qs\Scripts\activate
Nei terminali sub_one e sub_two, esegui il seguente comando:
Bash
source pyenv-qs/bin/activate
PowerShell
.\pyenv-qs\Scripts\activate
Dopo aver eseguito il comando di attivazione, il prompt dei comandi include il seguente valore
(pyenv-qs) $
.Nel terminale del publisher, installa la libreria client Python Pub/Sub utilizzando
pip
:python -m pip install --upgrade google-cloud-pubsub
In tutti e tre i terminali, configura una variabile di ambiente con il tuo ID progetto corrente. Questo comando gcloud determina l'ID progetto selezionato e lo imposta come variabile:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
In tutti e tre i terminali, passa al percorso del progetto che contiene il codice campione.
cd python-pubsub/samples/snippets/quickstart/
Avvia le app e osserva il flusso dei messaggi
Avvia l'applicazione Abbonato 1
Nel terminale sub_one, avvia Abbonato 1:
Bash
python sub.py $PROJECT sub_one
PowerShell
py sub.py $env:PROJECT sub_one
Una volta avviata, questa applicazione apre una connessione di streaming bidirezionale con il server. Pub/Sub invia i messaggi tramite lo stream.
Avvia l'applicazione Publisher
Nel terminale del publisher, avvia l'applicazione Publisher:
Bash
python pub.py $PROJECT hello_topic
PowerShell
py pub.py $env:PROJECT hello_topic
Dopo l'avvio dell'applicazione del publisher, il sistema Pub/Sub svolge quanto segue:
L'applicazione Publisher invia un messaggio "Hello, World!" a Pub/Sub senza essere a conoscenza di eventuali iscrizioni esistenti. Il server assegna anche un ID messaggio.
L'applicazione Abbonato 1 riceve il messaggio "Hello World", lo stampa e invia un ACK a Pub/Sub.
L'applicazione Editore stampa il riconoscimento. La conferma indica a Pub/Sub che il messaggio è stato elaborato correttamente e non deve essere inviato di nuovo a questo o a qualsiasi altro sottoscrittore di sub_one.
Pub/Sub rimuove il messaggio da sub_one.
Avvia l'applicazione Abbonato 2
Nel terminale sub_two, avvia Abbonato 2:
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env:PROJECT sub_two
Questo abbonato riceve i messaggi recapitati all'abbonamento sub_two.
L'abbonato 2 riutilizza lo script sub.py
. La differenza è che Abbonato 2 non viene avviato finché il publisher non ha inviato il messaggio all'argomento e alle iscrizioni. Se Editore chiamasse direttamente Abbonato 2, l'applicazione di pubblicazione dovrebbe attendere che Abbonato 2 venga visualizzato o deve scadere il tempo di attesa. Pub/Sub gestisce questo processo memorizzando efficacemente il messaggio per il sottoscrittore 2.
Ora puoi iniziare a sviluppare con Pub/Sub.
Com'è andata?
Ulteriori risorse e link sono disponibili nella pagina di assistenza di Pub/Sub.
Esegui la pulizia
- Interrompi tutte le applicazioni in esecuzione.
- Elimina la directory codice campione dall'ambiente locale.
Elimina l'argomento.
gcloud pubsub topics delete hello_topic
Eliminare gli abbonamenti.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Arresta il progetto del tutorial nella sezione IAM e amministrazione della console 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
Passaggi successivi
Ecco alcune cose che puoi provare:
Esamina il codice
pub.py
esub.py
del tutorial e sfoglia altri esempi di Pub/Sub su GitHub. Come esercizio, crea una versione dipub.py
che pubblichi l'ora locale ogni secondo.Scopri come inviare messaggi collettivi.
Utilizzando le sottoscrizioni push, ricevi messaggi che attivano endpoint App Engine o Cloud Functions.
Recupera i messaggi confermati in precedenza utilizzando la riproduzione. Per impostazione predefinita, Pub/Sub rimuove i messaggi confermati dalle sottoscrizioni. In questo tutorial, ad esempio, non potresti eseguire nuovamente
sub.py
per ricevere di nuovo il messaggio "Hello, World!". La funzionalità di ripetizione consente di configurare le sottoscrizioni in modo da poter ricevere i messaggi dopo che sono stati confermati.Inizia a utilizzare le librerie client in altri linguaggi.