Schnellstart: Funktionsfähiges Pub/Sub-System erstellen

Einführung

In diesem Schnellstart wird die Einrichtung einer einfachen Reihe von Anwendungen gezeigt, die kommunizieren, indem Nachrichten über Pub/Sub gesendet werden, 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.

Dieser Schnellstart richtet sich an Python-Entwickler, die macOS verwenden.

Voraussetzungen:

  • A Google-Konto
  • Ein macOS X-System, auf dem Python und Git installiert sind
  • Bis zu einer Stunde Zeit

Übersicht über das System

In dieser Schnellstartanleitung starten Sie eine Publisher-Anwendung, die eine "Hello, World!"-Nachricht an zwei Abonnenten sendet, 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. Cloud IAM-Berechtigungen einrichten und
  4. drei unabhängige Anwendungen starten: einen Publisher und zwei Abonnenten.

Schnelle Einrichtung

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.

    Zum Zeitpunkt der Erstellung dieses Schnellstarts fallen für den ersten Anteil des kostenlosen monatlichen Datenkontingents keine Kosten an. Genauere Informationen finden Sie auf der Seite Pub/Sub-Preise. Dieser Schnellstart enthält auch Anleitungen zur Bereinigung.

  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.

Zu diesem Zeitpunkt ist Ihre Pub/Sub-Umgebung bereit, den Nachrichtenfluss zwischen den Publisher- und Abonnentenanwendungen des Schnellstarts zu verwalten.

Anmeldedaten für ein Dienstkonto erstellen

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

    Zu den Cloud IAM-Dienstkonten

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

  3. Geben Sie unter Name des Dienstkontos einen Namen ein, z. B. pubsub-quickstart.

  4. Klicken Sie auf Erstellen.

  5. Für den Schnellstart 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

  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 dieses Schnellstarts 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 diesem Schnellstart 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

Dieser Schnellstart 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 diesem Schnellstart zurückkehren.

Publisher- und Abonnentencode überprüfen

  1. Erstellen Sie einen Projektordner, der die für diesen Schnellstart erforderlichen Pub/Sub-Python-Dateien enthält. Wechseln Sie anschließend zu ihm und laden Sie den Code herunter:

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

Drei Terminals einrichten

  1. Starten Sie für jede Schnellstartanwendung 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:

      python -m venv pyenv-qs && source pyenv-qs/bin/activate
    • In den anderen beiden Terminals reicht der folgende Befehl aus:

      source pyenv-qs/bin/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. Achten Sie darauf, dass Sie die virtuelle Umgebung so verwenden wie im Einrichtungsleitfaden beschrieben:

    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.

    export GOOGLE_APPLICATION_CREDENTIALS=~/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:

    export PROJECT=`gcloud config get-value project`

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

    echo $PROJECT
  5. Wechseln Sie in Ihren Projektordner und gehen Sie dann zum Beispielordner des Schnellstarts:

    cd python-docs-samples/pubsub/cloud-client/quickstart/
    

Apps starten und Nachrichtenfluss beobachten

Abonnent 1-Anwendung starten

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

python sub.py $PROJECT sub_one

Nach dem Start ruft diese Anwendung das Pub/Sub-Abo sub_one ab.

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:

python pub.py $PROJECT hello_topic
  • Die Publisher-Anwendung sendet eine "Hello, World!"-Nachricht an Pub/Sub und hat dabei keine Kenntnis von vorhandenen Abos. Die Anwendung 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

Abonnent 2-Anwendung starten

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

python sub.py $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 Schnellstartprojekt im Abschnitt IAM und Administrator 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 des Schnellstarts 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 diesem Schnellstart können Sie sub.py beispielsweise nicht noch einmal ausführen, um die Nachricht "Hello, World!" Nachricht noch einmal zu empfangen. Mit der Wiederholungsfunktion können Sie Abos so einrichten, dass Sie Nachrichten empfangen können, nachdem sie bestätigt wurden.