Crea un sistema Pub/Sub one-to-many

Questo tutorial illustra la configurazione di un insieme di applicazioni che comunicare 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) essere attivi e disponibili. Il publisher invia un messaggio a Pub/Sub. Il publisher non ha bisogno di sapere quali e quante applicazioni dell'abbonato per ricevere il messaggio. Di conseguenza, il servizio può essere utilizzato recapitare il messaggio a una o più applicazioni del sottoscrittore ogni volta che disponibili.

Panoramica del sistema

In questo tutorial viene avviata un'applicazione del publisher che invia a "Hello, World!" a due sottoscrittori utilizzando la comunicazione one-to-many, come illustrato nel diagramma seguente:

Diagramma dei
  relativi all'argomento, le relative sottoscrizioni collegate e il publisher e il sottoscrittore
  applicazioni che inviano e ricevono messaggi da Google Cloud
  Pub/Sub

Le applicazioni a due sottoscrittori utilizzano lo stesso codice, ma le avvii in momenti diversi. Questo processo dimostra come Pub/Sub consente la comunicazione asincrona. Per creare questo sistema, devi completare questi passaggi:

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

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

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

  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 richiedono Python 3.7 o superiore. 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, 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

Crea due sottoscrizioni e allegale all'argomento.

Queste iscrizioni sono StreamingPull, ovvero una tipo di pull abbonamento.

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

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

     git clone https://github.com/googleapis/python-pubsub.git
    
  2. Chiudi tutti i terminali aperti prima di procedere.

Configura tre terminali

  1. Avvia un terminale per ogni applicazione del tutorial (un publisher e due abbonati). Per praticità, in questo tutorial vengono chiamati questi 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 quanto segue valore (pyenv-qs) $.

  3. Nel terminale publisher, installa la libreria client Python di 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 il tuo attuale dell'ID progetto. Questo comando gcloud determina l'ID progetto selezionato e la 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 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.

Sottoscrittore 1
  inizia ad ascoltare i messaggi nell'abbonamento sub_one.

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

Una volta avviata l'applicazione del publisher, il sistema Pub/Sub le seguenti:

  • L'applicazione Publisher invia un messaggio "Hello World!". messaggio a Pub/Sub pur rimanendo inconsapevole di eventuali abbonamenti. Il server assegna anche un ID messaggio.

  • L'applicazione Subscriber 1 riceve il messaggio 'Hello World' messaggio, stampe e invia una conferma a Pub/Sub.

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

Pub/Sub rimuove il messaggio da sub_one.

Il publisher
  pubblica il messaggio e assegna un ID messaggio. Sottoscrittore 1
  riceve il comando 'Hello World' un messaggio e invia un'email
  conferma

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 iscritto 2 non viene avviato finché il publisher non ha inviato il messaggio all'argomento. e abbonamenti. Se Publisher chiamava direttamente Sottoscrittore 2, il per pubblicare un'applicazione deve attendere fino a quando non appare il sottoscrittore 2 o scade il tempo. Pub/Sub gestisce questo processo salvare in modo efficace il messaggio per il sottoscrittore 2.

Sottoscrittore 2
  inizia ad ascoltare e riceve il messaggio che lo aspettava tra
  sub_two

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

  1. Arresta tutte le applicazioni in esecuzione.
  2. Elimina la directory del codice campione dall'ambiente locale.
  3. Elimina 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. Chiudere il progetto tutorial in IAM e amministratore 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 a fare:

  • Esamina il codice pub.py e sub.py del tutorial e passa ad altre Esempi di Pub/Sub su GitHub. Come esercizio, crea una versione pub.py che pubblica l'ora locale ogni secondo.

  • Scopri come raggruppare i messaggi in batch.

  • Utilizzando le sottoscrizioni push, ricevi messaggi che attiva gli 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 abbonamenti. In questo tutorial, ad esempio, non potrai esegui nuovamente sub.py per ricevere il messaggio "Hello, World!" messaggio di nuovo. Guarda di nuovo di configurare le iscrizioni per ricevere messaggi dopo la conferma.

  • Inizia a utilizzare le librerie client in altri linguaggi.