Pub/Sub-System mit einer 1:n-Beziehung erstellen

In dieser Anleitung wird die Einrichtung einer Reihe von Anwendungen gezeigt, die kommunizieren, indem Nachrichten über Pub/Sub gesendet werden, anstatt über synchrone RPCs. Durch die Entkopplung von Anwendungen bietet Messaging folgende Vorteile:

  • 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 Publisher muss nicht wissen, welche und wie viele Abonnentenanwendungen die Nachricht erhalten müssen. Deshalb kann man sich darauf verlassen, dass der Dienst die Nachricht an eine oder mehrere Abonnentenanwendungen übermittelt, wann immer sie verfügbar sind.

Übersicht über das System

In dieser Anleitung starten Sie eine Publisher-Anwendung, die eine „Hallo Welt!“-Nachricht an zwei Abonnenten sendet, die eine 1:n-Kommunikation verwenden, 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. Führen Sie die folgenden Schritte aus, um dieses System zu erstellen:

  1. Erstellen Sie ein IAM-Dienstkonto, das von den Anwendungen zur Authentifizierung verwendet wird.
  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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Pub/Sub API:

    gcloud services enable pubsub.googleapis.com
  7. Create local authentication credentials for your user account:

    gcloud auth application-default login
  8. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the Pub/Sub API:

    gcloud services enable pubsub.googleapis.com
  14. Create local authentication credentials for your user account:

    gcloud auth application-default login
  15. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/pubsub.publisher, roles/pubsub.subscriber

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

Python installieren

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

Pub/Sub-Projekt einrichten

Um den Nachrichtenfluss zwischen Publisher- und Abonnentenanwendungen zu verwalten, 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, also 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 diese Terminals in dieser Anleitung so bezeichnet:

    • publisher-Terminal
    • sub_one-Terminal
    • sub_two-Terminal
  2. Erstelle und aktiviere im Terminal des Publishers 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, sollte Ihre Eingabeaufforderung den folgenden Wert (pyenv-qs) $ enthalten.

  3. Installieren Sie im Terminal des Publishers die Pub/Sub-Python-Clientbibliothek mithilfe von 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.

Clean-up

  1. Beenden Sie alle laufenden Anwendungen.
  2. Löschen Sie das Verzeichnis mit dem Beispielcode 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 und Verwaltung der Google Cloud Console.

  6. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

    gcloud auth application-default revoke
  7. Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke

Nächste Schritte

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

  • Untersuchen Sie den pub.py- und sub.py-Code der Anleitung und suchen Sie in anderen Pub/Sub-Beispielen 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 sub.py beispielsweise nicht noch einmal ausführen, um die Nachricht „Hello, World!“ zu empfangen. Mit der Wiederholungsfunktion können Sie Abos so einrichten, dass Sie Nachrichten empfangen können, nachdem sie bestätigt wurden.

  • Weitere Informationen zu Clientbibliotheken in anderen Sprachen