Crea un sistema Pub/Sub one-to-many

Questo tutorial illustra la configurazione di un insieme di applicazioni che comunicano inviando messaggi tramite Pub/Sub anziché RPC sincrone. Disaccoppiando le applicazioni, i messaggi:

  • Rende le applicazioni più solide
  • Potrebbe semplificare lo sviluppo

Ad esempio, il chiamante (publisher) non ha bisogno che il destinatario (iscritto) sia attivo e disponibile. Invia semplicemente un messaggio a Pub/Sub. Inoltre, l'editore non ha bisogno di sapere quali e quante applicazioni dell'abbonato devono ricevere il messaggio. Di conseguenza, il servizio può essere affidabile per recapitare il messaggio a una o più applicazioni del sottoscrittore ogni volta che sono disponibili.

Panoramica del sistema

In questo tutorial, inizierai un'applicazione dell'editore che invia un messaggio "Hello, World!" a due abbonati utilizzando una comunicazione one-to-many, come illustrato nel diagramma seguente:

Diagramma dell'argomento, delle relative sottoscrizioni associate 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 mostra in che modo Pub/Sub consente la comunicazione asincrona. Per creare questo sistema, completa i seguenti passaggi:

  1. Creare un account di servizio IAM che le applicazioni utilizzano per l'autenticazione.
  2. Configura le autorizzazioni IAM.
  3. Crea un argomento Pub/Sub e una sottoscrizione.
  4. Avvia tre domande di adesione indipendenti: un editore e due abbonati.

Prima di iniziare

  1. 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.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Attiva l'API Pub/Sub.

    gcloud services enable pubsub.googleapis.com
  7. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  8. 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.
  9. Installa Google Cloud CLI.
  10. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  11. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  12. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  13. Attiva l'API Pub/Sub.

    gcloud services enable pubsub.googleapis.com
  14. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  15. 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.

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 le applicazioni di pubblicazione e sottoscrizione, 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

Crea sottoscrizioni Pub/Sub

Creare due sottoscrizioni e collegarle all'argomento.

Queste sottoscrizioni sono StreamingPull, che è un tipo di sottoscrizione pull.

Abbonamento 1

Crea una sottoscrizione con l'ID sub_one e allegala a hello_topic.

gcloud pubsub subscriptions create sub_one --topic=hello_topic

Abbonamento 2

Crea una sottoscrizione con l'ID sub_two e allegala a hello_topic.

gcloud pubsub subscriptions create sub_two --topic=hello_topic

Crea il sistema one-to-many

Scarica il codice publisher e abbonato

  1. Scarica i file Python Pub/Sub necessari per questo tutorial.

     git clone https://github.com/googleapis/python-pubsub.git
    
  2. Prima di procedere, chiudi eventuali terminali aperti.

Configura tre terminali

  1. Avvia un terminale per ogni applicazione del tutorial (un editore e due iscritti). Per praticità, in questo tutorial vengono chiamati i seguenti terminali:

    • Terminale publisher
    • Terminale sub_one
    • Terminale sub_two
  2. 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) $.

  3. Nel terminale publisher, installa la libreria client Python Pub/Sub utilizzando pip:

    python -m pip install --upgrade google-cloud-pubsub
  4. In tutti e tre i terminali, configura una variabile di ambiente con l'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)
    
  5. In tutti e tre i terminali, passa al percorso di progetto che contiene il codice campione.

    cd python-pubsub/samples/snippets/quickstart/
    

Avvia le app e osserva il flusso dei messaggi

Avviare l'applicazione Abbonati 1

Nel terminale sub_one, avvia Abbonati 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 streaming bidirezionale con il server. Pub/Sub recapita i messaggi attraverso il flusso.

L'applicazione dell'iscritto 1 inizia ad ascoltare i messaggi nell'abbonamento sub_one.

Avviare l'applicazione Publisher

Nel terminale per 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 procede come segue:

  • L'applicazione Publisher invia un messaggio "Hello, World!" a Pub/Sub senza essere a conoscenza di abbonamenti esistenti. Il server assegna anche un ID messaggio.

  • L'applicazione Sottoscrittore 1 riceve il messaggio "Hello World", lo stampa e invia un riconoscimento a Pub/Sub.

  • L'applicazione Publisher stampa la conferma. La conferma indica a Pub/Sub che il messaggio è stato elaborato correttamente e che non deve essere inviato nuovamente a questo o a qualsiasi altro sottoscrittore di sub_one.

Pub/Sub rimuove il messaggio da sub_one.

L'applicazione Publisher pubblica il messaggio e assegna un ID messaggio. L'applicazione Sottoscrittore 1 riceve il messaggio "Hello World" e invia una conferma

Avviare l'applicazione Abbonati 2

Nel terminale sub_two, avvia Abbonati 2:

Bash

python sub.py $PROJECT sub_two

PowerShell

py sub.py $env:PROJECT sub_two

Questo sottoscrittore riceve i messaggi recapitati all'abbonamento sub_two. L'iscritto 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 chiamava direttamente Sottoscrittore 2, l'applicazione di pubblicazione dovrà attendere finché non appare l'Sottoscrittore 2 o andare in timeout. Pub/Sub gestisce questo processo salvando il messaggio per Sottoscrittore 2.

L'iscritto 2 inizia ad ascoltare e riceve il messaggio in attesa tra sub_two

Ora sei pronto a sviluppare con Pub/Sub.

Com'è andata?

Risorse e link aggiuntivi sono disponibili nella pagina di assistenza di Pub/Sub.

Esegui la pulizia

  1. Arresta tutte le applicazioni in esecuzione.
  2. Elimina la directory del codice campione dall'ambiente locale.
  3. Eliminare l'argomento.

    gcloud pubsub topics delete hello_topic
    
  4. Eliminare le sottoscrizioni.

    gcloud pubsub subscriptions delete sub_one
    
    gcloud pubsub subscriptions delete sub_two
    
  5. Arresta il progetto tutorial nella sezione IAM e amministrazione della console Google Cloud.

  6. Facoltativo: revoca le credenziali di autenticazione che hai creato ed elimina il file delle credenziali locale.

    gcloud auth application-default revoke
  7. Facoltativo: revoca le credenziali dallgcloud CLI.

    gcloud auth revoke

Passaggi successivi

Ecco alcune cose che puoi provare:

  • 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 utilizzare i messaggi in gruppo.

  • Utilizzando le sottoscrizioni Push, ricevi i messaggi che attivano gli endpoint di App Engine o Cloud Functions.

  • Recupera i messaggi confermati in precedenza utilizzando replay. Per impostazione predefinita, Pub/Sub rimuove i messaggi confermati dalle sottoscrizioni. In questo tutorial, ad esempio, non sarai in grado di rieseguire sub.py per ricevere di nuovo il messaggio "Hello, World!". La funzionalità di riproduzione 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.