Creazione di un sistema Pub/Sub one-to-many

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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:

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:

Diagramma dell'argomento, delle relative sottoscrizioni collegate e delle applicazioni dell'editore e del sottoscrittore che inviano e ricevono messaggi da Cloud Pub/Sub

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:

  1. Crea l'argomento Pub/Sub e le sottoscrizioni necessarie.
  2. Creare un account di servizio utilizzato dalle applicazioni per l'autenticazione.
  3. Configura le autorizzazioni IAM.
  4. 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

  1. Accedi alla console Google Cloud.

    Vai alla console Google Cloud

    Se non hai mai utilizzato Cloud, fai clic su Attiva e segui le istruzioni per configurare l'account Cloud.

  2. 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.

  3. Vai alla sezione Pub/Sub della console Google Cloud.

    Vai alla sezione Pub/Sub

    Segui le istruzioni per abilitare l'API.

  4. Fai clic su Crea un argomento. Le applicazioni di pubblicazione inviano messaggi agli argomenti. Utilizza hello_topic come Nome.

  5. Nella pagina Dettagli argomento, fai clic su Crea sottoscrizione:

    1. Assegna all'abbonamento il nome sub_one. Non modificare alcuna impostazione predefinita. Stai creando una sottoscrizione StreamingPull, che è un tipo di sottoscrizione pull.

    2. 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:

  1. Crea un account di servizio:

    1. Nella console Google Cloud, vai alla pagina Account di servizio.

      Vai agli account di servizio

    2. Seleziona il progetto.

    3. Fai clic su Crea account di servizio.

    4. 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.

    5. (Facoltativo) Nel campo Descrizione account di servizio, inserisci una descrizione per l'account di servizio.

    6. Fai clic su Crea e continua.

    7. 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.

      La finestra di dialogo delle autorizzazioni dell'account di servizio, utilizzando la stringa "pub" per filtrare in base ai ruoli Pub/Sub

    8. Fai clic su Aggiungi un altro ruolo e aggiungi Iscritti Pub/Sub.

      La finestra di dialogo delle autorizzazioni dell'account di servizio, con il publisher Pub/Sub e il sottoscrittore Pub/Sub, facendo clic sul pulsante Continua

    9. Fai clic su Fine per completare la creazione dell'account di servizio.

      Non chiudere la finestra del browser. La utilizzerai nel passaggio successivo.

  2. Scarica una chiave JSON per l'account di servizio appena creato. La libreria client utilizza la chiave per accedere all'API Pub/Sub.

    1. Nella console Google Cloud, fai clic sull'indirizzo email dell'account di servizio che hai creato.
    2. Fai clic su Chiavi.
    3. Fai clic su Aggiungi chiave, quindi su Crea nuova chiave.
    4. 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ì.

    5. Rinomina il file della chiave in ~/Downloads/key.json.

    6. 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

  1. 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.

  2. 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

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

  1. 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
    
  2. Chiudi eventuali terminali aperti prima di procedere.

Configura tre terminal

  1. 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
  2. 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.

  3. 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"
    
  4. 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
    
  5. 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.

L'applicazione Abbonamento 1 inizia ad ascoltare i messaggi sulla sottoscrizione sub_one.

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.

L'applicazione
  dell'editore pubblica il messaggio e assegna un ID messaggio. L'applicazione Abbonati 1 riceve il messaggio "Hello World" e invia una conferma

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.

L'abbonato 2
  inizia ad ascoltare e riceve il messaggio che lo aspettava in
  sub_due

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

  1. Interrompere tutte le applicazioni in esecuzione.

  2. Elimina la directory ~/pubsub-quickstart dal tuo ambiente locale.

  3. Arresta il progetto tutorial nella sezione IAM e amministrazione della console Google Cloud.

  4. 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 e sub.py del tutorial e sfoglia altri esempi di Pub/Sub su Github. Come esercizio, crea una versione di pub.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.