In dieser Anleitung wird die Einrichtung einer Reihe von Anwendungen beschrieben, die durch das Senden von Nachrichten über Pub/Sub anstelle von synchronen RPCs kommunizieren. Durch das Entkoppeln von Anwendungen kann das Messaging Folgendes tun:
- 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 Verlag oder Webpublisher muss nicht wissen, welche und wie viele Abonnentenanwendungen die Nachricht erhalten müssen. Daher kann der Dienst darauf angewiesen werden, die Nachricht an eine oder mehrere Abonnentenanwendungen zu senden, wenn diese verfügbar sind.
Übersicht über das System
In dieser Anleitung starten Sie eine Publisher-Anwendung, die mithilfe von 1:n-Kommunikation die Nachricht „Hello, World!“ an zwei Abonnenten sendet, wie im folgenden Diagramm 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. Um dieses System zu erstellen, führen Sie die folgenden Schritte aus:
- Erstellen Sie ein IAM-Dienstkonto, das die Anwendungen für die Authentifizierung verwenden.
- IAM-Berechtigungen einrichten.
- Erstellen Sie ein Pub/Sub-Thema und ein Abo.
- drei unabhängige Anwendungen starten: einen Publisher und zwei Abonnenten.
Hinweise
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
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.
-
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Aktivieren Sie die Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:
gcloud auth application-default login
-
Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/pubsub.publisher, roles/pubsub.subscriber
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.
- Ersetzen Sie
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
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.
-
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Aktivieren Sie die Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:
gcloud auth application-default login
-
Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/pubsub.publisher, roles/pubsub.subscriber
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.
- Ersetzen Sie
Python installieren
In dieser Anleitung werden die Pub/Sub-Clientbibliotheken verwendet, für die Python 3.7 oder höher erforderlich ist. Folgen Sie der Anleitung zum Installieren von Python.
Pub/Sub-Projekt einrichten
Zum Verwalten des Nachrichtenflusses zwischen Veröffentlichen und Abonnieren von Anwendungen 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, bei denen es sich um eine Art pull-Abo handelt.
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
Laden Sie die für diese Anleitung erforderlichen Pub/Sub-Python-Dateien 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). Der Einfachheit halber werden diese Terminals in dieser Anleitung aufgerufen:
- publisher-Terminal
- sub_one-Terminal
- sub_two-Terminal
Erstellen und aktivieren Sie im Publisher-Terminal 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 Befehl zum Aktivieren ausgeführt haben, enthält die Eingabeaufforderung den Wert
(pyenv-qs) $
.Installieren Sie im publisher-Terminal die Pub/Sub Python-Clientbibliothek mit
pip
:python -m pip install --upgrade google-cloud-pubsub
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)
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.
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 Beispielcodeverzeichnis aus Ihrer lokalen Umgebung.
Thema löschen
gcloud pubsub topics delete hello_topic
Löschen Sie die Abos.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Beenden Sie das Anleitungsprojekt in der Google Cloud Console im Bereich IAM & Verwaltung.
-
Optional: Widerrufen Sie die von Ihnen erstellten Anmeldedaten für die Authentifizierung und löschen Sie die lokale Datei mit den Anmeldedaten:
gcloud auth application-default revoke
-
Optional: Widerrufen Sie Anmeldedaten von der gcloud-CLI.
gcloud auth revoke
Nächste Schritte
Hier sind einige Dinge, die Sie ausprobieren können:
Sehen Sie sich den
pub.py
- undsub.py
-Code der Anleitung an und durchsuchen Sie andere Pub/Sub-Beispiele auf GitHub. 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 beispielsweise
sub.py
nicht noch einmal ausführen, um die Nachricht „Hello, World!“ zu erhalten. Mit der Replay-Funktion kannst du Abos so einrichten, dass du Nachrichten empfangen kannst, nachdem sie bestätigt wurden.Erste Schritte mit Clientbibliotheken in anderen Sprachen