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

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Einführung

In dieser Anleitung werden Sie durch die Einrichtung einer einfachen Reihe von Anwendungen geführt, die kommunizieren, indem Nachrichten über Pub/Sub statt synchroner RPCs gesendet werden. Durch die Entkopplung von Anwendungen:

  • 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. Deshalb kann man sich darauf verlassen, dass der Dienst die Nachricht an eine oder mehrere Abonnentenanwendungen übermittelt, wann immer sie verfügbar sind.

Voraussetzungen:

Übersicht über das System

In dieser Anleitung starten Sie eine Publisher-Anwendung, die eine "Hello, World!"-Nachricht an zwei Abonnenten sendet, die eine 1:n-Kommunikation verwenden, wie unten 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. Wenn Sie dieses System erstellen möchten, müssen Sie

  1. das Pub/Sub-Thema und die erforderlichen Abos erstellen,
  2. das Dienstkonto erstellen, das von den Anwendungen zur Authentifizierung verwendet wird,
  3. IAM-Berechtigungen einrichten.
  4. drei unabhängige Anwendungen starten: einen Publisher und zwei Abonnenten.

Einrichtung für die Anleitung

Ihr Google Cloud-Projekt und Ihr Pub/Sub-Thema sowie Ihre Abos einrichten

  1. Melden Sie sich in der Google Cloud Console an.

    Weiter zur Google Cloud Console

    Wenn Sie Cloud zum ersten Mal verwenden, klicken Sie auf Aktivieren und folgen Sie den Aufforderungen, um Ihr Cloudkonto einzurichten.

  2. Wählen Sie ein vorhandenes Projekt aus oder erstellen Sie ein neues. Wenn Sie Google Cloud zum ersten Mal verwenden, wird ein Standardprojekt für Sie erstellt.

    Notieren Sie sich die Projekt-ID im Bereich Startseite der Google Cloud Console. Mit diesem Wert legen Sie das aktuelle Cloud Storage-Projekt während der Initialisierung der gcloud CLI fest. Sie übergeben diese ID auch an das Python-Skript, wenn Sie die Publisher- und Abonnentenanwendungen starten.

  3. Rufen Sie in der Google Cloud Console den Pub/Sub-Abschnitt auf.

    Zum Abschnitt „Pub/Sub“

    Folgen Sie der Aufforderung, um die API zu aktivieren.

  4. Klicken Sie auf Thema erstellen. Publisher-Anwendungen senden Nachrichten an Themen. Verwenden Sie als Name hello_topic.

  5. Klicken Sie auf der Seite Themendetails auf Abo erstellen:

    1. Geben Sie dem Abo den Namen sub_one. Ändern Sie keine der Standardeinstellungen. Sie erstellen ein StreamingPull -Abo, bei dem es sich um einen Pull-Abo handelt.

    2. Verwenden Sie dasselbe Verfahren, um ein weiteres Abo zu erstellen, das mit hello_topic verbunden ist und dem Sie den Namen sub_two geben.

      Sie können in der Ansicht Themen auf den Themennamen klicken, um die neuen Abos aufzurufen, oder Sie können in die Ansicht Abos wechseln.

Ihre Pub/Sub-Umgebung ist jetzt bereit, den Nachrichtenfluss zwischen den Veröffentlichungs- und Aboanwendungen zu verwalten.

Anmeldedaten für ein Dienstkonto erstellen

Führen Sie die folgenden Schritte nur aus, wenn Sie ein Dienstkonto verwenden:

  1. Erstellen Sie ein Dienstkonto:

    1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

      Zur Seite „Dienstkonten“

    2. Wählen Sie Ihr Projekt aus.

    3. Klicken Sie auf Dienstkonto erstellen.

    4. Geben Sie im Feld Dienstkontoname einen Namen ein, z. B. pubsub-tutorial. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.

    5. Optional: Im Feld Beschreibung des Dienstkontos können Sie eine entsprechende Beschreibung eingeben.

    6. Klicken Sie auf Erstellen und fortfahren.

    7. Für diese Anleitung benötigt das Dienstkonto Publisher- und Abonnentenberechtigungen. Verwenden Sie das Drop-down-Menü Select a role (Rolle auswählen), um die Rolle Pub/Sub Publisher (Pub/Sub-Publisher) hinzuzufügen.

      Das Dialogfeld Dienstkontoberechtigungen, das den String "pub" nutzt, um nach Pub/Sub-Rollen zu filtern

    8. Klicken Sie auf Add another role (Weitere Rolle hinzufügen) und fügen Sie Pub/Sub Subscriber (Cloud Pub/Sub-Abonnent) hinzu.

      Das Dialogfeld "Berechtigungen für Dienstkonto" mit Pub/Sub Publisher und Pub/Sub-Abonnenten. Auf die Schaltfläche "Weiter" klicken.

    9. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

      Schließen Sie das Browserfenster nicht. Sie verwenden es in der nächsten Aufgabe.

  2. Laden Sie einen JSON-Schlüssel für das gerade erstellte Dienstkonto herunter. Die Clientbibliothek verwendet den Schlüssel für den Zugriff auf die Pub/Sub API.

    1. Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
    2. Klicken Sie auf Schlüssel.
    3. Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
    4. Klicken Sie auf Erstellen. Daraufhin wird eine JSON-Schlüsseldatei auf Ihren Computer heruntergeladen.

      Der Schlüssel wird an Ihren Downloads-Ordner gesendet. Im Rahmen dieser Anleitung können Sie ihn dort belassen.

    5. Benennen Sie die Schlüsseldatei in ~/Downloads/key.json um.

    6. Klicken Sie auf Schließen.

Unter Anmeldedaten für Standardanmeldedaten für Anwendungen bereitstellen finden Sie weitere Möglichkeiten, Anmeldedaten bereitzustellen, die kein Dienstkonto enthalten.

Führen Sie den folgenden Befehl einmal für jede IAM-Rolle aus, die Sie anwenden möchten, um Ihrem Google-Konto Rollen zuzuweisen.

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.

Google Cloud CLI installieren

  1. Folgen Sie der Anleitung zum Installieren und Initialisieren der Google Cloud CLI.

    • Wählen Sie beim Initialisieren der gcloud CLI die Option zum Eingeben einer Projekt-ID aus und geben Sie die ID des Projekts ein, das Sie im Abschnitt zur Einrichtung erstellt oder ausgewählt haben.

    • Nachdem Sie die gcloud CLI installiert und initialisiert haben, können Sie zu dieser Anleitung zurückkehren. Sie müssen keine anderen Komponenten installieren oder die Cloud-Clientbibliotheken herunterladen.

    Nachdem Sie die gcloud CLI installiert haben, können Sie mit der Google Cloud CLI Pub/Sub-Vorgänge in Compute Engine ausführen.

  2. Starten Sie ein neues Terminal, bevor Sie diese gcloud-Befehle verwenden:

    gcloud pubsub topics list
    gcloud pubsub subscriptions list
    

    Sie können auch gcloud config set project PROJECT_ID verwenden, um von dem Projekt, das Sie während der Initialisierung eingerichtet haben, zu einem anderen Projekt zu wechseln.

Rufen Sie Python auf und richten Sie eine virtuelle Umgebung ein

Diese Anleitung enthält ein Verwendungsbeispiel, sodass Sie nicht dem Beispiel im Abschnitt zum Einrichten der virtuellen Umgebung folgen müssen. Sie können nach der Installation der virtuellen Umgebung zu dieser Anleitung zurückkehren.

Publisher- und Abonnentencode überprüfen

  1. Erstellen Sie einen Projektordner, der die für diese Anleitung erforderlichen Pub/Sub-Python-Dateien enthält. Wechseln Sie anschließend zu ihm und laden Sie den Code 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). Führen Sie in jedem Terminal alle Vorgänge dieses Abschnitts aus. Der Einfachheit halber verweisen wir auf diese Terminals als:

    • publisher-Terminal
    • sub_one-Terminal
    • sub_two-Terminal
  2. Erstellen Sie eine virtuelle Python-Umgebung und aktivieren Sie sie.

    Führen Sie im ersten Terminal den folgenden Befehl aus, um eine virtuelle Umgebung mit dem Namen pyenv-qs zu erstellen und zu aktivieren:

    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 anderen beiden Terminals 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 (pyenv-qs) $ enthalten.

    Sie können Ihre virtuelle Umgebung auch auf eine andere Python-Version verweisen.

  3. Installieren Sie die Pub/Sub-Python-Clientbibliothek mithilfe von pip:

    python -m pip install --user --upgrade google-cloud-pubsub

    Verknüpfen Sie den JSON-Schlüssel mit dem Dienstkonto. Die Schlüssel-Pub/Sub-Rollen haben Sie beim Erstellen der Dienstkonto-Anmeldedaten zugewiesen. Die Pub/Sub-Clientbibliotheken greifen auf die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS zu und erhalten die mit dem Dienstkonto verknüpften Rollen und Berechtigungen.

    Bash

    export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/key.json
    

    PowerShell

    $env:GOOGLE_APPLICATION_CREDENTIALS="$HOME\Downloads\key.json"
    
  4. Richten Sie eine Umgebungsvariable mit Ihrer aktuellen Projekt-ID ein. Mit dem folgenden gcloud-Befehl wird die aktuell ausgewählte Projekt-ID festgelegt und als Variable festgelegt:

    Bash

    export PROJECT=`gcloud config get-value project`
    

    PowerShell

    $env:PROJECT=$(gcloud config get-value project)
    

    So prüfen Sie, ob Ihre aktuelle Google Cloud-Instanz korrekt als diese Variable registriert ist:

    Bash

    echo $PROJECT
    

    PowerShell

    $env:PROJECT
    
  5. Wechseln Sie in Ihren Projektordner und gehen Sie dann zum Beispielordner der Anleitung:

    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. 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 Verzeichnis ~/pubsub-quickstart aus Ihrer lokalen Umgebung.

  3. Beenden Sie das Anleitungsprojekt im Abschnitt IAM und Verwaltung der Google Cloud Console.

  4. Entfernen Sie die Anmeldedaten des Dienstkontos: rm ~/Downloads/key.json

Nächste Schritte

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

  • Sehen Sie sich den Code pub.py und sub.py der Anleitung an und sehen Sie sich weitere 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 empfangen. 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.