In dieser Anleitung wird die Einrichtung einer Reihe von Anwendungen gezeigt, die kommunizieren, indem Nachrichten über Pub/Sub gesendet werden, anstatt über synchrone RPCs. Durch die Entkopplung von Anwendungen bietet Messaging folgende Vorteile:
- 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 Publisher muss 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.
Übersicht über das System
In dieser Anleitung starten Sie eine Publisher-Anwendung, die eine „Hallo Welt!“-Nachricht an zwei Abonnenten sendet, die eine 1:n-Kommunikation verwenden, 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. Führen Sie die folgenden Schritte aus, um dieses System zu erstellen:
- Erstellen Sie ein IAM-Dienstkonto, das von den Anwendungen zur Authentifizierung verwendet wird.
- IAM-Berechtigungen einrichten.
- Erstellen Sie ein Pub/Sub-Thema und ein Abo.
- drei unabhängige Anwendungen starten: einen Publisher und zwei Abonnenten.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Python installieren
In dieser Anleitung werden die Pub/Sub-Clientbibliotheken verwendet. Dazu ist Python 3.7 oder höher erforderlich. Folgen Sie der Anleitung zum Installieren von Python.
Pub/Sub-Projekt einrichten
Um den Nachrichtenfluss zwischen Publisher- und Abonnentenanwendungen zu verwalten, 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, also Pull-Abos.
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 so bezeichnet:
- publisher-Terminal
- sub_one-Terminal
- sub_two-Terminal
Erstelle und aktiviere im Terminal des Publishers 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 Aktivierungsbefehl ausgeführt haben, sollte Ihre Eingabeaufforderung den folgenden Wert
(pyenv-qs) $
enthalten.Installieren Sie im Terminal des Publishers die Pub/Sub-Python-Clientbibliothek mithilfe von
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.
Clean-up
- Beenden Sie alle laufenden Anwendungen.
- Löschen Sie das Verzeichnis mit dem Beispielcode 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 im Abschnitt IAM und Verwaltung der Google Cloud Console.
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
Nächste Schritte
Hier sind einige Dinge, die Sie ausprobieren können:
Untersuchen Sie den
pub.py
- undsub.py
-Code der Anleitung und suchen Sie in anderen Pub/Sub-Beispielen 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
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.Weitere Informationen zu Clientbibliotheken in anderen Sprachen