Questo tutorial illustra come configurare un insieme di applicazioni che comunicano inviando messaggi tramite Pub/Sub anziché RPC sincrone. Disaccoppiando le applicazioni, la messaggistica:
- Rende le applicazioni più solide
- Potrebbe semplificare lo sviluppo
Ad esempio, il chiamante (editore) non ha bisogno che il destinatario (sottoscrittore) sia attivo e disponibile. Il publisher invia un messaggio a Pub/Sub. Non è necessario che l'editore sappia quali e quante applicazioni dell'abbonato devono ricevere il messaggio. Di conseguenza, è possibile fare affidamento sul servizio per consegnare il messaggio a una o più applicazioni del sottoscrittore ogni volta che sono disponibili.
Panoramica del sistema
In questo tutorial, avvierai un'applicazione del publisher che invia un messaggio "Hello, World!" a due sottoscrittori utilizzando una comunicazione one-to-many, come illustrato nel seguente diagramma:
Le applicazioni a due sottoscrittori utilizzano lo stesso codice, ma le avvii in momenti diversi. Questo processo dimostra in che modo Pub/Sub abilita la comunicazione asincrona. Per creare questo sistema, devi completare questi passaggi:
- Creare un account di servizio IAM che le applicazioni utilizzano per l'autenticazione.
- Configura le autorizzazioni IAM.
- Creare un argomento Pub/Sub e una sottoscrizione.
- Avvia tre domande indipendenti: un publisher e due sottoscrittori.
Prima di iniziare
- Accedi al tuo account Google Cloud. 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
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.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Pub/Sub.
gcloud services enable pubsub.googleapis.com
-
Crea credenziali di autenticazione locali per il tuo Account Google:
gcloud auth application-default login
-
Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM:
roles/pubsub.publisher, roles/pubsub.subscriber
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 singolo ruolo.
- Sostituisci
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
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.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Pub/Sub.
gcloud services enable pubsub.googleapis.com
-
Crea credenziali di autenticazione locali per il tuo Account Google:
gcloud auth application-default login
-
Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM:
roles/pubsub.publisher, roles/pubsub.subscriber
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 singolo ruolo.
- Sostituisci
Installa Python
Questo tutorial utilizza le librerie client Pub/Sub, che richiede Python 3.7 o versioni successive. Completa le istruzioni per installare Python.
configura il progetto Pub/Sub
Per gestire il flusso di messaggi tra la pubblicazione e la sottoscrizione delle applicazioni, devi creare 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 allegale all'argomento.
Si tratta di una sottoscrizione StreamingPull, che è un tipo di sottoscrizione pull.
Sottoscrizione 1
Crea una sottoscrizione con ID sub_one
e allegalo a hello_topic
.
gcloud pubsub subscriptions create sub_one --topic=hello_topic
Sottoscrizione 2
Crea una sottoscrizione con ID sub_two
e allegalo a hello_topic
.
gcloud pubsub subscriptions create sub_two --topic=hello_topic
Crea il sistema one-to-many
Scaricare il codice dell'editore e dell'abbonato
Scarica i file Python 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 sottoscrittori). Per praticità, in questo tutorial vengono chiamati questi terminali:
- Terminale publisher
- Terminale sub_one
- Terminale sub_two
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 questo 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 di 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 attuale. 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 Subscriber 1
Nel terminale sub_one, avvia Subscriber 1:
Bash
python sub.py $PROJECT sub_one
PowerShell
py sub.py $env:PROJECT sub_one
Una volta avviata, questa applicazione apre una connessione in modalità flusso bidirezionale con il server. Pub/Sub recapita i messaggi nel flusso.
Avviare 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 sottoscrizioni esistenti. Il server assegna anche un ID messaggio.
L'applicazione Subscriber 1 riceve il messaggio "Hello World", lo stampa e invia una conferma a Pub/Sub.
L'applicazione Publisher stampa la conferma. La conferma comunica a Pub/Sub che il messaggio è stato elaborato correttamente e che non deve essere inviato nuovamente a questo o a qualsiasi altro sottoscrittore sub_one.
Pub/Sub rimuove il messaggio da sub_one.
Avvia l'applicazione Subscriber 2
Nel terminale sub_two, avvia Subscriber 2:
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env:PROJECT sub_two
Questo sottoscrittore riceve i messaggi consegnati alla sottoscrizione sub_two.
Il sottoscrittore 2 riutilizza lo script sub.py
. La differenza è che il sottoscrittore
2 viene avviato solo dopo che l'editore ha inviato il messaggio all'argomento
e alle sottoscrizioni. Se l'editore chiamasse direttamente il sottoscrittore 2, l'applicazione di pubblicazione dovrebbe attendere fino a quando non appare il sottoscrittore 2
oppure avrebbe dovuto scadere. Pub/Sub gestisce questo processo
salvando in modo efficace il messaggio per il sottoscrittore 2.
Ora è tutto pronto per sviluppare con Pub/Sub.
Com'è andata?
Ulteriori risorse e link sono disponibili nella pagina di assistenza di Pub/Sub.
Esegui la pulizia
- Arresta tutte le applicazioni in esecuzione.
- Elimina la directory del codice campione dall'ambiente locale.
Elimina l'argomento.
gcloud pubsub topics delete hello_topic
Eliminare le sottoscrizioni.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Arresta il progetto 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
-
Facoltativo: revoca le credenziali dallgcloud CLI.
gcloud auth revoke
Passaggi successivi
Ecco alcune cose che puoi provare a fare:
Esamina il codice
pub.py
esub.py
del tutorial e sfoglia altri esempi Pub/Sub su GitHub. Come esercizio, crea una versione dipub.py
che pubblichi l'ora locale ogni secondo.Scopri come raggruppare i messaggi in batch.
Utilizzando le sottoscrizioni push, ricevi messaggi che attivano endpoint di App Engine o Cloud Functions.
Recupera i messaggi confermati in precedenza utilizzando la funzione replay. Per impostazione predefinita, Pub/Sub rimuove i messaggi confermati dalle sottoscrizioni. In questo tutorial, ad esempio, non potrai 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.