Introduzione
Questo tutorial illustra la configurazione di un semplice insieme di applicazioni che comunicano l'invio di messaggi tramite Pub/Sub anziché RPC sincroni. Disaccoppiando le applicazioni e i messaggi:
- Rende le applicazioni più robuste
- Potrebbe semplificare lo sviluppo
Ad esempio, il chiamante (editore) non ha bisogno che il destinatario (abbonato) sia disponibile e disponibile. Invia semplicemente un messaggio a Pub/Sub. Inoltre, l'editore non deve sapere quale e quante applicazioni dell'abbonato devono ricevere il messaggio. Di conseguenza, il servizio può fare affidamento per consegnare il messaggio a una o più applicazioni dell'abbonato quando sono disponibili.
Requisiti:
- Un Account Google
- Fino a un'ora di tempo per il completamento
Panoramica del sistema
In questo tutorial, avvii un'applicazione dell'editore che invia un messaggio "Hello World" a due abbonati utilizzando la comunicazione one-to-many, come illustrato di seguito:
Le due applicazioni dell'abbonato utilizzano lo stesso codice, ma le avvii in momenti diversi. Questo processo dimostra come Pub/Sub consenta la comunicazione asincrona. Per creare questo sistema, devi:
- Crea l'argomento Pub/Sub e le sottoscrizioni necessarie.
- Creare un account di servizio utilizzato dalle applicazioni per l'autenticazione.
- Configura le autorizzazioni IAM.
- Avvia tre applicazioni indipendenti: un publisher e due abbonati.
Configurazione del tutorial
Configura il progetto Google Cloud e l'argomento e le sottoscrizioni Pub/Sub
Accedi alla console Google Cloud.
Se non hai mai utilizzato Cloud, fai clic su Attiva e segui le istruzioni per configurare l'account Cloud.
Seleziona un progetto esistente o creane uno nuovo. La prima volta che utilizzi Google Cloud viene creato un progetto predefinito.
Nella sezione Home della console Google Cloud, prendi nota dell'ID progetto. Utilizza questo valore per impostare il tuo progetto Cloud Storage attuale durante il processo di inizializzazione dell'interfaccia a riga di comando gcloud. Passerai questo ID anche allo script Python all'avvio delle applicazioni dell'editore e dell'abbonato.
Vai alla sezione Pub/Sub della console Google Cloud.
Segui le istruzioni per abilitare l'API.
Fai clic su Crea un argomento. Le applicazioni di pubblicazione inviano messaggi agli argomenti. Utilizza hello_topic come Nome.
Nella pagina Dettagli argomento, fai clic su Crea sottoscrizione:
Assegna all'abbonamento il nome sub_one. Non modificare alcuna impostazione predefinita. Stai creando una sottoscrizione StreamingPull, che è un tipo di sottoscrizione pull.
Utilizza la stessa procedura per creare un'altra sottoscrizione collegata a hello_topic, denominata sub_due.
Puoi fare clic sul nome dell'argomento nella visualizzazione Argomenti per visualizzare le nuove sottoscrizioni oppure passare alla visualizzazione Iscrizioni.
A questo punto, il tuo ambiente Pub/Sub è pronto per gestire il flusso di messaggi tra le applicazioni di pubblicazione e sottoscrizione.
Crea credenziali account di servizio
Esegui i seguenti passaggi solo se utilizzi un account di servizio:
Crea un account di servizio:
Nella console Google Cloud, vai alla pagina Account di servizio.
Seleziona il progetto.
Fai clic su
Crea account di servizio.Nel campo Nome account di servizio, inserisci un nome, ad esempio
pubsub-tutorial
. La console Google Cloud compila il campo ID account di servizio in base a questo nome.(Facoltativo) Nel campo Descrizione account di servizio, inserisci una descrizione per l'account di servizio.
Fai clic su Crea e continua.
Per il tutorial, l'account di servizio deve disporre delle autorizzazioni di pubblicazione e abbonamento. Utilizza il menu a discesa Seleziona un ruolo per aggiungere il ruolo Publisher Pub/Sub.
Fai clic su Aggiungi un altro ruolo e aggiungi Iscritti Pub/Sub.
Fai clic su Fine per completare la creazione dell'account di servizio.
Non chiudere la finestra del browser. La utilizzerai nel passaggio successivo.
Scarica una chiave JSON per l'account di servizio appena creato. La libreria client utilizza la chiave per accedere all'API Pub/Sub.
- Nella console Google Cloud, fai clic sull'indirizzo email dell'account di servizio che hai creato.
- Fai clic su Chiavi.
- Fai clic su Aggiungi chiave, quindi su Crea nuova chiave.
Fai clic su Crea. Sul computer viene scaricato un file della chiave JSON.
La chiave viene inviata alla cartella Download. Ai fini di questo tutorial, puoi lasciarlo lì.
Rinomina il file della chiave in ~/Downloads/key.json.
Fai clic su Chiudi.
Per scoprire altri metodi per fornire le credenziali che non coinvolgano un account di servizio, consulta Fornire le credenziali per le credenziali predefinite dell'applicazione.
Per concedere i ruoli al tuo Account Google, esegui il comando seguente una volta per ogni ruolo IAM da applicare.
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Sostituisci PROJECT_ID con l'ID progetto.
- Sostituisci EMAIL_ADDRESS con il tuo indirizzo email.
- Sostituisci ROLE con ogni ruolo.
Installa Google Cloud CLI
Segui le istruzioni per installare e inizializzare Google Cloud CLI.
Durante l'inizializzazione dell'interfaccia a riga di comando gcloud, seleziona l'opzione per inserire un ID progetto e inserisci l'ID del progetto che hai creato o scelto nella sezione della configurazione.
Puoi tornare a questo tutorial dopo aver installato e inizializzato l'interfaccia a riga di comando gcloud. Non è necessario installare altri componenti o scaricare le librerie client di Cloud.
Dopo aver installato gcloud CLI, puoi utilizzare Google Cloud CLI per eseguire le operazioni Pub/Sub in Compute Engine.
Avvia un nuovo terminale prima di utilizzare questi comandi gcloud:
gcloud pubsub topics list gcloud pubsub subscriptions list
Puoi anche utilizzare
gcloud config set project PROJECT_ID
per modificare il progetto da quello che hai impostato durante l'inizializzazione.
Scarica Python e configura un ambiente virtuale
Completa le istruzioni per installare Python 3 su macOS.
(Facoltativo) Configurare un ambiente virtuale.
Questo tutorial fornisce un esempio di utilizzo, quindi non è necessario seguire l'esempio mostrato nella sezione di configurazione dell'ambiente virtuale. Puoi tornare a questo tutorial dopo aver installato l'ambiente virtuale.
Dai un'occhiata al codice editore e abbonato
Creare una cartella di progetto per contenere i file Python Pub/Sub necessari per questo tutorial. Quindi modificalo e scarica il codice:
git clone https://github.com/googleapis/python-pubsub.git
Chiudi eventuali terminali aperti prima di procedere.
Configura tre terminal
Avvia un terminale per ogni applicazione tutorial (un editore e due iscritti). In ciascuno dei terminali, esegui tutte le operazioni descritte in questa sezione. Per praticità, chiamiamo questi terminali:
- terminale publisher
- Terminale sub_one
- Terminale sub_due
Creare un ambiente virtuale Python e attivarlo.
Nel primo terminale, esegui questo comando per creare e attivare un ambiente virtuale denominato
pyenv-qs
:Bash
python -m venv pyenv-qs source pyenv-qs/bin/activate
PowerShell
py -m venv pyenv-qs .\pyenv-qs\Scripts\activate
Negli altri due terminali, esegui il comando seguente:
Bash
source pyenv-qs/bin/activate
PowerShell
.\pyenv-qs\Scripts\activate
Dopo aver eseguito il comando di attivazione, il prompt dei comandi deve includere
(pyenv-qs) $
.Puoi anche indirizzare l'ambiente virtuale a una versione Python diversa.
Installa la libreria client Python di Pub/Sub utilizzando
pip
:python -m pip install --user --upgrade google-cloud-pubsub
Associa la chiave JSON all'account di servizio. Hai assegnato i ruoli chiave Pub/Sub durante la creazione delle credenziali dell'account di servizio. Le librerie client di Pub/Sub accedono alla variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
e ricevono i ruoli e le autorizzazioni associati all'account di servizio.Bash
export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/key.json
PowerShell
$env:GOOGLE_APPLICATION_CREDENTIALS="$HOME\Downloads\key.json"
Configurare una variabile di ambiente con l'ID progetto attuale. Questo comando gcloud determina l'ID progetto attualmente selezionato e lo imposta come variabile:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
Per verificare che il tuo account Google Cloud attuale sia registrato correttamente come questa variabile:
Bash
echo $PROJECT
PowerShell
$env:PROJECT
Passa alla cartella del progetto, quindi passa alla cartella di esempio del tutorial:
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 recapita i messaggi attraverso il flusso.
Avvia l'applicazione Publisher
Nel terminale 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 dell'editore, il sistema Pub/Sub esegue le seguenti operazioni:
L'applicazione Publisher invia un messaggio "Hello, World!" a Pub/Sub senza essere a conoscenza di eventuali abbonamenti esistenti. Il server assegna anche un ID messaggio.
L'applicazione Subscribe 1 riceve il messaggio "Hello World", lo stampa e invia un riconoscimento a Pub/Sub.
L'applicazione Publisher stampa la conferma. La conferma comunica a Pub/Sub che il messaggio è stato elaborato correttamente e non deve essere inviato di nuovo a questo o a qualsiasi altro sottoscrittore sub_one.
Pub/Sub rimuove il messaggio da sub_one.
Avvia l'applicazione Abbonati 2
Nel terminale sub_due, avvia Abbonato 2:
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env:PROJECT sub_two
Questo abbonato riceve i messaggi recapitati alla sottoscrizione sub_due.
L'abbonato 2 riutilizza lo script sub.py
. La differenza è che Iscritti
2 viene avviato solo dopo che l'editore ha inviato il messaggio all'argomento
e alle iscrizioni. Se Publisher chiamava direttamente l'Abbonato 2, l'applicazione di pubblicazione avrebbe dovuto attendere fino alla visualizzazione dell'Abbonato 2 oppure dovrebbe andare in timeout. Pub/Sub gestisce questo processo salvando in modo efficace il messaggio per il abbonato 2.
Ora sei pronto per sviluppare con Pub/Sub.
Com'è andata?
Ulteriori risorse e link sono disponibili nella pagina di assistenza di Pub/Sub.
Esegui la pulizia
Interrompere tutte le applicazioni in esecuzione.
Elimina la directory
~/pubsub-quickstart
dal tuo ambiente locale.Arresta il progetto tutorial nella sezione IAM e amministrazione della console Google Cloud.
Rimuovi le credenziali dell'account di servizio:
rm ~/Downloads/key.json
Passaggi successivi
Ecco alcune operazioni che puoi provare a eseguire:
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 raggruppare i messaggi.
Utilizzando le sottoscrizioni push, ricevi i messaggi che attivano gli endpoint di 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 potrai eseguire di nuovo
sub.py
per ricevere di nuovo il messaggio "Hello, World!". La funzionalità di riproduzione ti consente di configurare le sottoscrizioni in modo da ricevere i messaggi dopo che sono stati confermati.Inizia a utilizzare le librerie client in altre lingue.