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:
- Ein Google-Konto
- Bis zu einer Stunde Zeit
Ü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:
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
- das Pub/Sub-Thema und die erforderlichen Abos erstellen,
- das Dienstkonto erstellen, das von den Anwendungen zur Authentifizierung verwendet wird,
- IAM-Berechtigungen einrichten.
- 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
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.
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.
Rufen Sie in der Google Cloud Console den Pub/Sub-Abschnitt auf.
Folgen Sie der Aufforderung, um die API zu aktivieren.
Klicken Sie auf Thema erstellen. Publisher-Anwendungen senden Nachrichten an Themen. Verwenden Sie als Name hello_topic.
Klicken Sie auf der Seite Themendetails auf Abo erstellen:
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.
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:
Erstellen Sie ein Dienstkonto:
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Wählen Sie Ihr Projekt aus.
Klicken Sie auf
Dienstkonto erstellen.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.Optional: Im Feld Beschreibung des Dienstkontos können Sie eine entsprechende Beschreibung eingeben.
Klicken Sie auf Erstellen und fortfahren.
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.
Klicken Sie auf Add another role (Weitere Rolle hinzufügen) und fügen Sie Pub/Sub Subscriber (Cloud Pub/Sub-Abonnent) hinzu.
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.
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.
- Klicken Sie in der Google Cloud Console auf die E-Mail-Adresse des von Ihnen erstellten Dienstkontos.
- Klicken Sie auf Schlüssel.
- Klicken Sie auf Schlüssel hinzufügen > Neuen Schlüssel erstellen.
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.
Benennen Sie die Schlüsseldatei in ~/Downloads/key.json um.
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
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.
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
Befolgen Sie die Anleitungen zum Installieren von Python 3 unter macOS.
Optional: 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
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
Schließen Sie alle offenen Terminals, bevor Sie fortfahren.
Drei Terminals einrichten
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
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.
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"
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
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.
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.
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.
Jetzt können Sie mit Pub/Sub entwickeln!
Wie ist es gelaufen?
Weitere Ressourcen und Links finden Sie auf der Pub/Sub-Supportseite.
Bereinigen
Beenden Sie alle laufenden Anwendungen.
Löschen Sie das Verzeichnis
~/pubsub-quickstart
aus Ihrer lokalen Umgebung.Beenden Sie das Anleitungsprojekt im Abschnitt IAM und Verwaltung der Google Cloud Console.
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
undsub.py
der Anleitung an und sehen Sie sich weitere Pub/Sub-Beispiele auf GitHub an. Erstellen Sie als Übung eine Version vonpub.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.