Questo tutorial illustra la configurazione di un insieme di applicazioni che comunicano inviando messaggi tramite Pub/Sub anziché RPC sincrone. Disaccoppiando le applicazioni, la messaggistica:
- Rende le applicazioni più robuste
- Potrebbe semplificare lo sviluppo
Ad esempio, il chiamante (publisher) non ha bisogno che il destinatario (sottoscrittore) sia attivo e disponibile. Il publisher invia un messaggio a Pub/Sub. Il publisher non deve sapere quali e quante applicazioni sottoscrittrici devono ricevere il messaggio. Di conseguenza, è possibile fare affidamento sul servizio per recapitare il messaggio a una o più applicazioni sottoscrittrici ogni volta che sono disponibili.
Panoramica del sistema
In questo tutorial, avvierai un'applicazione publisher che invia un messaggio "Hello, World!" a due sottoscrittori utilizzando la comunicazione uno-a-molti, come illustrato nel seguente diagramma:
Le due applicazioni sottoscrittrici utilizzano lo stesso codice, ma le avvii in momenti diversi. Questo processo dimostra come Pub/Sub consente la comunicazione asincrona. Per creare questo sistema, completa i seguenti passaggi:
- Crea un account di servizio IAM che le applicazioni utilizzano per l'autenticazione.
- Configura le autorizzazioni IAM.
- Crea un argomento e una sottoscrizione Pub/Sub.
- Avvia tre applicazioni indipendenti: un publisher e due sottoscrittori.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Google Cloud progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Google Cloud progetto che stai creando. -
Seleziona il Google Cloud progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Google Cloud progetto.
-
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
Abilita l'API Pub/Sub:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'serviceusage.services.enableautorizzazione. Scopri come concedere i ruoli.gcloud services enable pubsub.googleapis.com
-
Crea le credenziali di autenticazione locali per il tuo account utente:
gcloud auth application-default login
Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.
-
Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/pubsub.publisher, roles/pubsub.subscribergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio,myemail@example.com.ROLE: il ruolo IAM che concedi al tuo account utente.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'resourcemanager.projects.createautorizzazione. Scopri come concedere i ruoli.
-
Crea un Google Cloud progetto:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il Google Cloud progetto che stai creando. -
Seleziona il Google Cloud progetto che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del Google Cloud progetto.
-
Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.
Abilita l'API Pub/Sub:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'serviceusage.services.enableautorizzazione. Scopri come concedere i ruoli.gcloud services enable pubsub.googleapis.com
-
Crea le credenziali di autenticazione locali per il tuo account utente:
gcloud auth application-default login
Se viene restituito un errore di autenticazione e utilizzi un provider di identità (IdP) esterno, verifica di aver acceduto a gcloud CLI con la tua identità federata.
-
Concedi i ruoli al tuo account utente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/pubsub.publisher, roles/pubsub.subscribergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Sostituisci quanto segue:
PROJECT_ID: il tuo ID progetto.USER_IDENTIFIER: l'identificatore del tuo account utente. Ad esempio,myemail@example.com.ROLE: il ruolo IAM che concedi al tuo account utente.
Installa Python
Questo tutorial utilizza le librerie client Pub/Sub, che richiedono Python 3.7 o versioni successive. Completa le istruzioni per l'installazione di Python.
Configura il progetto Pub/Sub
Per gestire il flusso di messaggi tra le applicazioni di pubblicazione e sottoscrizione, crea un argomento e due sottoscrizioni diverse.
Crea un argomento Pub/Sub
Crea un argomento con l'ID hello_topic:
gcloud pubsub topics create hello_topic
Crea sottoscrizioni Pub/Sub
Crea due sottoscrizioni e collegale all'argomento.
Queste sottoscrizioni sono una sottoscrizione StreamingPull, che è un tipo di sottoscrizione 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
Sottoscrizione 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 uno-a-molti
Scarica il codice del publisher e del sottoscrittore
Scarica i file Python Pub/Sub necessari per questo tutorial.
git clone https://github.com/googleapis/python-pubsub.git
Prima di procedere, chiudi tutti i terminali aperti.
Configura tre terminali
Avvia un terminale per ogni applicazione del tutorial (un publisher e due sottoscrittori). Per praticità, questo tutorial chiama questi terminali:
- Terminale publisher
- sub_one Terminale
- sub_two Terminale
Nel terminale 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 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 l'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 di messaggi
Avvia l'applicazione Sottoscrittore 1
Nel terminale sub_one, avvia Sottoscrittore 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 tramite lo stream.

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 publisher, il sistema Pub/Sub esegue le seguenti operazioni:
L'applicazione Publisher invia un messaggio "Hello, World!" a Pub/Sub senza conoscere le sottoscrizioni esistenti. Il server assegna anche un ID messaggio.
L'applicazione Sottoscrittore 1 riceve il messaggio "Hello World", lo stampa e invia una conferma a Pub/Sub.
L'applicazione Publisher stampa la conferma. La conferma indica a Pub/Sub che il messaggio è stato elaborato correttamente e non deve essere inviato di nuovo a questo o ad altri sub_one.
Pub/Sub rimuove il messaggio da sub_one.

Avvia l'applicazione Sottoscrittore 2
Nel terminale sub_two, avvia Sottoscrittore 2:
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env:PROJECT sub_two
Questo sottoscrittore riceve i messaggi recapitati alla sottoscrizione sub_two.
Sottoscrittore 2 riutilizza lo script sub.py. La differenza è che Sottoscrittore 2 viene avviato solo dopo che Publisher ha inviato il messaggio all'argomento e alle sottoscrizioni. Se Publisher chiamasse direttamente Sottoscrittore 2, l'applicazione di pubblicazione dovrebbe attendere l'avvio di Sottoscrittore 2 o dovrebbe scadere il timeout. Pub/Sub gestisce questo processo salvando il messaggio per 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.
Libera spazio
- Arresta tutte le applicazioni in esecuzione.
- Elimina la directory del codice campione dall'ambiente locale.
Rimuovi l'argomento.
gcloud pubsub topics delete hello_topic
Elimina le sottoscrizioni.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Arresta il progetto del tutorial nella sezione IAM e amministrazione della Google Cloud console.
-
(Facoltativo) Revoca le credenziali di autenticazione che hai creato ed elimina il file delle credenziali locali
gcloud auth application-default revoke
-
(Facoltativo) Revoca le credenziali da gcloud CLI.
gcloud auth revoke
Passaggi successivi
Ecco alcune cose che puoi provare:
Esamina il codice
pub.pyesub.pydel tutorial e sfoglia altri esempi di Pub/Sub su GitHub. Come esercizio, crea una versione dipub.pyche pubblica l'ora locale ogni secondo.Scopri come raggruppare i messaggi.
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 di nuovo
sub.pyper ricevere di nuovo il messaggio "Hello, World!". La funzionalità di riproduzione ti consente di configurare le sottoscrizioni in modo da poter ricevere i messaggi dopo che sono stati confermati.Inizia a utilizzare le librerie client in altre lingue.