1:n-Pub/Sub-System erstellen

In dieser Anleitung werden Sie durch die Einrichtung einer Reihe von Anwendungen geführt, die kommunizieren, indem sie Nachrichten über Pub/Sub statt über synchrone RPCs senden. Durch die Entkopplung von Anwendungen kann das Messaging

  • 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. Er sendet einfach eine Nachricht an Pub/Sub. Auch muss der Publisher nicht wissen, welche und wie viele Abonnentenanwendungen die Nachricht erhalten müssen. Daher kann der Dienst darauf vertrauen, dass die Nachricht an eine oder mehrere Abonnentenanwendungen gesendet wird, sobald diese verfügbar sind.

Übersicht über das System

In dieser Anleitung starten Sie eine Publisher-Anwendung, die die Nachricht „Hello, World!“ über 1:n-Kommunikation 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. Zum Erstellen dieses Systems 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. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  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. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  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 zur Installation von Python.

Pub/Sub-Projekt einrichten

Erstellen Sie ein Thema und zwei verschiedene Abos, um den Nachrichtenfluss zwischen veröffentlichenden und abonnierenden Anwendungen zu verwalten.

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, also auch pull-Abos.

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 in dieser Anleitung diese Terminals 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 Aktivierungsbefehl 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 Anwendung Abonnent 1 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 im Abschnitt IAM & Verwaltung der Google Cloud Console.

  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 sehen Sie sich andere Pub/Sub-Beispiele auf GitHub an. 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 sub.py beispielsweise nicht noch einmal ausführen, um die Nachricht „Hello, World!“ zu erhalten. Mit der Wiederholungsfunktion können Sie Abos so einrichten, dass Sie Nachrichten empfangen können, nachdem sie bestätigt wurden.

  • Erste Schritte mit Clientbibliotheken in anderen Sprachen