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

Einführung

In dieser Anleitung wird die Einrichtung einer einfachen Reihe von Anwendungen gezeigt. Diese kommunizieren durch Senden von Nachrichten über Pub/Sub anstatt über synchrone RPCs. Durch die Entkopplung von Anwendungen bewirkt Messaging Folgendes:

  • 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. Bei der Google Cloud Console anmelden

    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 im Abschnitt Startseite der Cloud Console die Projekt-ID. Mit diesem Wert legen Sie Ihr aktuelles Cloud Storage-Projekt während der Initialisierung des Cloud SDK 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 Bereich "Pub/Sub" auf.

    Zum Bericht "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

  1. Rufen Sie in der Konsole den Abschnitt Dienstkonten auf.

    IAM-Dienstkonten aufrufen

  2. Wählen Sie Ihr Projekt aus und klicken Sie auf Dienstkonto erstellen.

  3. Geben Sie einen Dienstkontonamen ein, z. B. pubsub-tutorial.

  4. Klicken Sie auf Erstellen.

  5. Für die Anleitung benötigt das Dienstkonto Berechtigungen zum Veröffentlichen und Abonnieren. 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

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

    Das Dialogfeld

  7. Klicken Sie auf Weiter. Sie müssen Nutzern keinen Zugriff auf dieses Dienstkonto gewähren.

  8. Klicken Sie auf Schlüssel erstellen. Der Schlüssel wird von der Clientbibliothek für den Zugriff auf die Pub/Sub API verwendet.

  9. Wählen Sie JSON aus und klicken Sie auf Erstellen.

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

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

Cloud SDK installieren

  1. Befolgen Sie die Anleitungen zum Installieren und Initialisieren des Cloud SDK.

    • Wählen Sie bei der Initialisierung des Cloud SDK die Option zur Eingabe einer Projekt-ID aus und geben Sie die ID des Projekts ein, das Sie im Setup-Abschnitt erstellt oder ausgewählt haben.

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

    Nachdem Sie das Cloud SDK installiert haben, können Sie mit dem gcloud-Befehlszeilentool 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. Nach der Installation der virtuellen Umgebung können Sie 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 mit pip:

    pip install --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. Dieser gcloud-Befehl ermittelt Ihre aktuell ausgewählte Projekt-ID und legt sie als Variable fest:

    Bash

    export PROJECT=gcloud config get-value project
    

    PowerShell

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

    So überprüfen Sie die korrekte Registrierung Ihres aktuellen GCP-Projekts als diese Variable:

    Bash

    echo $PROJECT
    

    PowerShell

    $env:PROJECT
    
  5. Wechseln Sie in Ihren Projektordner und rufen Sie den Beispielordner für die Anleitung auf:

    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 liefert 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. Außerdem weist der Server 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

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 ~/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:

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