Pub/Sub-System mit 1:n erstellen

In dieser Anleitung wird die Einrichtung einer Reihe von Anwendungen beschrieben, die durch das Senden von Nachrichten über Pub/Sub anstelle von synchronen RPCs kommunizieren. Durch das Entkoppeln von Anwendungen kann das Messaging Folgendes tun:

  • Anwendungen werden robuster gemacht
  • Die Entwicklung kann vereinfacht werden

Zum Beispiel ist es für den Aufrufer (Publisher) nicht notwendig, dass der Empfänger (Abonnent) verfügbar ist. Der Publisher sendet eine Nachricht an Pub/Sub. Der Verlag oder Webpublisher muss nicht wissen, welche und wie viele Abonnentenanwendungen die Nachricht erhalten müssen. Daher kann der Dienst darauf angewiesen werden, die Nachricht an eine oder mehrere Abonnentenanwendungen zu senden, wenn diese verfügbar sind.

Übersicht über das System

In dieser Anleitung starten Sie eine Publisher-Anwendung, die mithilfe von 1:n-Kommunikation die Nachricht „Hello, World!“ an zwei Abonnenten sendet, wie im folgenden Diagramm dargestellt:

Diagramm des Themas, der mit ihm verbundenen Abos sowie der Publisher- und Abonnentenanwendungen, die Nachrichten an Cloud Pub/Sub senden und darüber empfangen

Die beiden Abonnentenanwendungen verwenden denselben Code, werden jedoch von Ihnen zu unterschiedlichen Zeiten gestartet. Dieser Prozess zeigt, wie Pub/Sub die asynchrone Kommunikation ermöglicht. Um dieses System zu erstellen, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie ein IAM-Dienstkonto, das die Anwendungen für die Authentifizierung verwenden.
  2. IAM-Berechtigungen einrichten.
  3. Erstellen Sie ein Pub/Sub-Thema und ein Abo.
  4. drei unabhängige Anwendungen starten: einen Publisher und zwei Abonnenten.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die Pub/Sub API:

    gcloud services enable pubsub.googleapis.com
  7. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

    gcloud auth application-default login
  8. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.
  9. Installieren Sie die Google Cloud CLI.
  10. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  13. Aktivieren Sie die Pub/Sub API:

    gcloud services enable pubsub.googleapis.com
  14. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

    gcloud auth application-default login
  15. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.

Python installieren

In dieser Anleitung werden die Pub/Sub-Clientbibliotheken verwendet, für die Python 3.7 oder höher erforderlich ist. Folgen Sie der Anleitung zum Installieren von Python.

Pub/Sub-Projekt einrichten

Zum Verwalten des Nachrichtenflusses zwischen Veröffentlichen und Abonnieren von Anwendungen erstellen Sie ein Thema und zwei verschiedene Abos.

Pub/Sub-Thema erstellen

Erstellen Sie ein Thema mit der ID hello_topic:

gcloud pubsub topics create hello_topic

Pub/Sub-Abos erstellen

Erstellen Sie zwei Abos und hängen Sie sie an Ihr Thema an.

Diese Abos sind StreamingPull-Abos, bei denen es sich um eine Art pull-Abo handelt.

Abo 1

Erstellen Sie ein Abo mit der ID sub_one und hängen Sie es an hello_topic an.

gcloud pubsub subscriptions create sub_one --topic=hello_topic

Abo 2

Erstellen Sie ein Abo mit der ID sub_two und hängen Sie es an hello_topic an.

gcloud pubsub subscriptions create sub_two --topic=hello_topic

1:n-System erstellen

Publisher- und Abonnentencode herunterladen

  1. Laden Sie die für diese Anleitung erforderlichen Pub/Sub-Python-Dateien herunter.

     git clone https://github.com/googleapis/python-pubsub.git
    
  2. Schließen Sie alle offenen Terminals, bevor Sie fortfahren.

Drei Terminals einrichten

  1. Starten Sie für jede Anleitungsanwendung ein Terminal (einen Publisher und zwei Abonnenten). Der Einfachheit halber werden diese Terminals in dieser Anleitung aufgerufen:

    • publisher-Terminal
    • sub_one-Terminal
    • sub_two-Terminal
  2. Erstellen und aktivieren Sie im Publisher-Terminal eine virtuelle Python-Umgebung mit dem Namen pyenv-qs.

    Bash

    python -m venv pyenv-qs
    source pyenv-qs/bin/activate
    

    PowerShell

    py -m venv pyenv-qs
    .\pyenv-qs\Scripts\activate
    

    Führen Sie in den Terminals sub_one und sub_two den folgenden Befehl aus:

    Bash

    source pyenv-qs/bin/activate
    

    PowerShell

    .\pyenv-qs\Scripts\activate
    

    Nachdem Sie den Befehl zum Aktivieren ausgeführt haben, enthält die Eingabeaufforderung den Wert (pyenv-qs) $.

  3. Installieren Sie im publisher-Terminal die Pub/Sub Python-Clientbibliothek mit pip:

    python -m pip install --upgrade google-cloud-pubsub
  4. Richten Sie in allen drei Terminals eine Umgebungsvariable mit Ihrer aktuellen Projekt-ID ein. Mit diesem gcloud-Befehl wird die ausgewählte Projekt-ID ermittelt und als Variable festgelegt:

    Bash

    export PROJECT=`gcloud config get-value project`
    

    PowerShell

    $env:PROJECT=$(gcloud config get-value project)
    
  5. Wechseln Sie in allen drei Terminals zum Projektpfad, der den Beispielcode enthält.

    cd python-pubsub/samples/snippets/quickstart/
    

Apps starten und Nachrichtenfluss beobachten

Abonnent 1-Anwendung starten

Starten Sie im sub_one-Terminal Subscriber 1 (Abonnent 1):

Bash

python sub.py $PROJECT sub_one

PowerShell

py sub.py $env:PROJECT sub_one

Nach dem Start öffnet diese Anwendung eine bidirektionale Streaming-Verbindung mit dem Server. Pub/Sub sendet Nachrichten über den Stream.

Die Abonnent 1-Anwendung beginnt, das Abo sub_one auf Nachrichten zu prüfen.

Publisher-Anwendung starten

Starten Sie im Publisher-Terminal die Publisher-Anwendung:

Bash

python pub.py $PROJECT hello_topic

PowerShell

py pub.py $env:PROJECT hello_topic

Nach dem Start der Publisher-Anwendung führt das Pub/Sub-System folgende Schritte aus:

  • Die Publisher-Anwendung sendet eine "Hello, World!"-Nachricht an Pub/Sub und hat dabei keine Kenntnis von vorhandenen Abos. Der Server weist auch eine Nachrichten-ID zu.

  • Die Anwendung Subscriber 1 (Abonnent 1) empfängt die Nachricht "Hello World", gibt sie aus und sendet eine Bestätigung an Pub/Sub.

  • Die Anwendung Publisher gibt die Bestätigung aus. Durch die Bestätigung wird Pub/Sub mitgeteilt, dass die Nachricht erfolgreich verarbeitet wurde und nicht noch einmal an diesen oder einen anderen sub_one-Abonnenten gesendet werden muss.

Pub/Sub entfernt die Nachricht aus sub_one.

Die Publisher-Anwendung veröffentlicht die Nachricht und weist eine Nachrichten-ID zu. Die Abonnent-1-Anwendung empfängt die Nachricht „Hello World“ und sendet eine Bestätigung

Abonnent 2-Anwendung starten

Starten Sie im sub_two-Terminal Subscriber 2 (Abonnent 2):

Bash

python sub.py $PROJECT sub_two

PowerShell

py sub.py $env:PROJECT sub_two

Dieser Abonnent empfängt Nachrichten, die an das Abo sub_two gesendet werden. Subscriber 2 verwendet das Skript sub.py noch einmal. Der Unterschied besteht darin, dass Abonnent 2 erst gestartet wird, nachdem der Publisher die Nachricht an das Thema und die Abos gesendet hat. Würde Publisher direkt Abonnent 2 aufrufen, müsste die Publisher-Anwendung entweder warten, bis Abonnent 2 reagiert, oder es müsste eine Zeitüberschreitung auftreten. Pub/Sub bewältigt diesen Prozess, indem die Nachricht für Abonnent 2 effektiv gespeichert wird.

Abonnent 2 beginnt zu prüfen und empfängt die Nachricht, die auf ihn in sub_two gewartet hat

Jetzt können Sie mit Pub/Sub entwickeln!

Wie ist es gelaufen?

Weitere Ressourcen und Links finden Sie auf der Pub/Sub-Supportseite.

Bereinigen

  1. Beenden Sie alle laufenden Anwendungen.
  2. Löschen Sie das Beispielcodeverzeichnis aus Ihrer lokalen Umgebung.
  3. Thema löschen

    gcloud pubsub topics delete hello_topic
    
  4. Löschen Sie die Abos.

    gcloud pubsub subscriptions delete sub_one
    
    gcloud pubsub subscriptions delete sub_two
    
  5. Beenden Sie das Anleitungsprojekt in der Google Cloud Console im Bereich IAM & Verwaltung.

  6. Optional: Widerrufen Sie die von Ihnen erstellten Anmeldedaten für die Authentifizierung und löschen Sie die lokale Datei mit den Anmeldedaten:

    gcloud auth application-default revoke
  7. Optional: Widerrufen Sie Anmeldedaten von der gcloud-CLI.

    gcloud auth revoke

Nächste Schritte

Hier sind einige Dinge, die Sie ausprobieren können:

  • Sehen Sie sich den pub.py- und sub.py-Code der Anleitung an und durchsuchen Sie andere Pub/Sub-Beispiele auf GitHub. Erstellen Sie als Übung eine Version von pub.py, die jede Sekunde die Ortszeit veröffentlicht.

  • Lernen Sie, Nachrichten in Batches zusammenzufassen.

  • Empfangen Sie mithilfe von Push-Abos Nachrichten, die App Engine-Endpunkte oder Cloud Functions-Funktionen auslösen.

  • Rufen Sie zuvor bestätigte Nachrichten mithilfe der Funktion Replay (Wiederholung) ab. Standardmäßig entfernt Pub/Sub bestätigte Nachrichten aus Abos. In dieser Anleitung können Sie beispielsweise sub.py nicht noch einmal ausführen, um die Nachricht „Hello, World!“ zu erhalten. Mit der Replay-Funktion kannst du Abos so einrichten, dass du Nachrichten empfangen kannst, nachdem sie bestätigt wurden.

  • Erste Schritte mit Clientbibliotheken in anderen Sprachen