Zum lokalen Entwickeln und Testen Ihrer Anwendung können Sie den Pub/Sub-Emulator verwenden, der eine lokale Emulation des Pub/Sub-Produktionsdienstes bereitstellt. Sie führen Pub/Sub aus. Emulator mit der Google Cloud CLI.
Um Ihre Anwendung mit dem Emulator auszuführen, starten Sie zuerst den Emulator und legen Sie die Umgebungsvariablen fest. Ihre Anwendung muss kommunizieren, mit dem Emulator anstatt mit dem Pub/Sub-Produktionsdienst. Die erstellten Ressourcen und im Emulator veröffentlichte Nachrichten werden für die Dauer der Emulatorsitzung aufrechterhalten.
Hinweise
Bevor Sie Pub/Sub verwenden können, müssen Sie die folgenden Voraussetzungen erfüllen Emulator:
Richten Sie eine Python-Entwicklungsumgebung ein.
Installieren Sie ein JDK.
Installieren Sie die Google Cloud CLI.
Anwendung mit den Cloud-Clientbibliotheken erstellen
Emulator installieren
Installieren Sie den Emulator über eine Eingabeaufforderung:
gcloud components install pubsub-emulator gcloud components update
Emulator als Container-Image installieren
Um den Emulator als Container zu installieren und auszuführen, laden Sie die Datei gcloud-Docker-Image:
Emulator starten
Starten Sie den Emulator, indem Sie pubsub start
über eine Eingabeaufforderung aufrufen. Bevor Sie den Befehl ausführen, ersetzen Sie PUBSUB_PROJECT_ID durch eine gültige Google Cloud-Projekt-ID. Zeichenfolge. Der String muss nicht
ein echtes Google Cloud-Projekt darstellen,
Der Pub/Sub-Emulator wird lokal ausgeführt.
gcloud beta emulators pubsub start --project=PUBSUB_PROJECT_ID [options]
Eine vollständige Liste der Flags finden Sie unter gcloud beta emulators pubsub start
.
Nach dem Starten des Emulators wird eine Meldung wie die folgende angezeigt:
... [pubsub] This is the Pub/Sub fake. [pubsub] Implementation may be incomplete or differ from the real system. ... [pubsub] INFO: Server started, listening on 8085
Diese Nachricht gibt an, dass der Pub/Sub-Server am Emulatorendpunkt ausgeführt wird auf Ihrem lokalen Computer statt auf dem Google Cloud-Endpunkt. Alle Vorgänge lokal erfolgen, darunter:
- Erstellen eines Themas oder Abos
- Verlagswesen
- Wird abonniert
Umgebungsvariablen festlegen
Nachdem Sie den Emulator gestartet haben, müssen Sie die Umgebungsvariablen so festlegen, die Anwendung eine Verbindung zum Emulator statt zu Pub/Sub herstellt. Legen Sie die Umgebungsvariablen auf dem Computer fest, auf dem auch die Anwendung ausgeführt wird.
Sie müssen die Umgebungsvariablen bei jedem Start des Emulators festlegen. Die Umgebungsvariablen hängen von dynamisch zugewiesenen Portnummern ab, die sich beim Neustart des Emulators ändern können.
Variablen automatisch einstellen
Wenn die Anwendung und der Emulator auf demselben Computer ausgeführt werden, können Sie die Umgebungsvariablen automatisch festlegen:
Linux/MacOS
Führen Sie env-init
mit Befehlsersetzung aus:
$(gcloud beta emulators pubsub env-init)
Windows
Erstellen Sie eine Batchdatei und verwenden Sie bei der Ausführung die Ausgabe von env-init
:
gcloud beta emulators pubsub env-init > set_vars.cmd && set_vars.cmd
Ihre Anwendung stellt jetzt eine Verbindung zum Pub/Sub-Emulator her.
Variablen manuell einstellen
Wenn die Anwendung und der Emulator auf unterschiedlichen Computern ausgeführt werden, legen Sie die Umgebungsvariablen manuell fest:
Führen Sie den Befehl
env-init
aus:gcloud beta emulators pubsub env-init
Legen Sie auf dem Computer, auf der Ihre Anwendung ausgeführt wird, die Umgebungsvariable
PUBSUB_EMULATOR_HOST
und den Wert entsprechend der Ausgabe des Befehlsenv-init
fest. Diese Konfiguration verbindet Ihre Anwendung mit dem Emulator. Optional können Sie diePUBSUB_PROJECT_ID
-Umgebung festlegen für das Projekt, das Sie für den Emulator verwenden möchten.Linux/macOS export PUBSUB_EMULATOR_HOST=[::1]:8432 export PUBSUB_PROJECT_ID=my-project-id
Fenster set PUBSUB_EMULATOR_HOST=[::1]:8432 set PUBSUB_PROJECT_ID=my-project-id
Ihre Anwendung stellt jetzt eine Verbindung zum Pub/Sub-Emulator her.
Hinweis: Wenn Sie mit Python App Engine Standard local Anwendungsserver müssen Sie diese Umgebungsvariable folgendermaßen in der Befehlszeile übergeben:
dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST}
dev_appserver.py
ist in deinem [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
enthalten.
Emulator verwenden
Wenn Sie den Emulator verwenden möchten, müssen Sie eine Anwendung mit den Cloud-Clientbibliotheken erstellt haben.
Der Emulator unterstützt die Google Cloud Console oder gcloud pubsub
nicht
.
Im folgenden Beispiel wird die Verwendung des Emulators und einer Anwendung veranschaulicht mit dem Python-Cloud-Clientbibliothek um verschiedene Vorgänge auszuführen. Beispiele für diese Vorgänge sind Themen erstellen, Nachrichten veröffentlichen und lesen.
Führen Sie die folgenden Schritte auf dem Computer aus, auf dem Sie die Umgebungsvariablen für den Emulator festgelegt haben:
Rufen Sie die Pub/Sub Python-Beispiele von GitHub ab. Klonen Sie dafür das vollständige Python-Repository.
Wechseln Sie in Ihrem geklonten Repository zum Verzeichnis
samples/snippets
. Sie führen die restlichen Schritte in diesem Verzeichnis aus.Installieren Sie aus dem Verzeichnis
samples/snippets
die Abhängigkeiten, die Sie zum Ausführen des Beispiels benötigen:pip install -r requirements.txt
Erstellen Sie ein Thema:
python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
(Optional) Wenn Sie keinen lokalen Push-Endpunkt haben zum Testen von Push-Abos im Emulator führen Sie die folgenden Schritte aus: um eins auf
http://[::1]:3000/messages
zu erstellen.- Installieren Sie JSON-Server.
npm install -g json-server
- Starten Sie JSON Server.
Dabei enthältjson-server --port 3000 --watch db.json
db.json
den folgenden Startcode:{ "messages": [] }
- Notieren Sie sich im nächsten Schritt
http://[::1]:3000/messages
für PUSH_ENDPOINT.
- Installieren Sie JSON-Server.
Erstellen Sie ein Abo für das Thema:
Erstellen Sie ein Pull-Abo:
python subscriber.py PUBSUB_PROJECT_ID create TOPIC_ID SUBSCRIPTION_ID
Push-Abo erstellen:
python subscriber.py PUBSUB_PROJECT_ID create-push TOPIC_ID SUBSCRIPTION_ID \ PUSH_ENDPOINT
Veröffentlichen Sie Nachrichten zum Thema:
python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
Lesen Sie die zu dem Thema veröffentlichten Nachrichten:
Nachrichten aus Ihrem Pull-Abo abrufen:
python subscriber.py PUBSUB_PROJECT_ID receive SUBSCRIPTION_ID
Beobachten Sie die an Ihren lokalen Push-Endpunkt zugestellten Nachrichten. Nachrichten sehen beispielsweise so aus:
{ "messages": [ { "subscription": "projects/PUBSUB_PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "message": { "data": "TWVzc2FnZSBudW1iZXIgMQ==", "messageId": "10", "attributes": {} }, "id": 1 }, ... ] }
Umgebungsvariablen aufrufen
In allen Sprachen außer Java und C# wird von den Pub/Sub-Clientbibliotheken anstelle von Pub/Sub automatisch die in der lokalen Instanz ausgeführte API aufgerufen, wenn Sie PUBSUB_EMULATOR_HOST
wie unter Umgebungsvariablen festlegen beschrieben festgelegt haben.
Bei C#- und Java-Clientbibliotheken müssen Sie jedoch den Code ändern, um den Emulator zu verwenden:
C#
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für C# in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub C# API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Java
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Java in der Pub/Sub-Schnellstart mit Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Java API Referenzdokumentation.
Richten Sie Standardanmeldedaten für Anwendungen ein, um sich bei Pub/Sub zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
Emulator beenden
Drücken Sie zum Beenden des Emulators Strg+C.
Nachdem Sie den Emulator beendet haben, führen Sie den folgenden Befehl aus, um die Umgebungsvariable PUBSUB_EMULATOR_HOST
zu entfernen, damit Ihre Anwendung eine Verbindung zu Pub/Sub herstellt:
unset PUBSUB_EMULATOR_HOST
set PUBSUB_EMULATOR_HOST=
Befehlszeilenargumente des Emulators
Weitere Informationen zu Befehlszeilenargumenten für den Pub/Sub-Emulator finden Sie unter gcloud beta emulators pubsub
.
Unterstützte Features
Der Emulator unterstützt die folgenden Pub/Sub-Features:
- Nachrichten veröffentlichen
- Nachrichten von Push- und Pull-Abos empfangen
- Nachrichten in eine Reihenfolge bringen
- Nachrichten wiedergeben
- Nachrichten an Themen für unzustellbare Nachrichten weiterleiten
- Richtlinien für Wiederholungsversuche bei der Nachrichtenübermittlung
- Schemaunterstützung für Avro
Bekannte Einschränkungen
- Die RPCs
UpdateTopic
undUpdateSnapshot
werden nicht unterstützt. - IAM-Vorgänge werden nicht unterstützt.
- Die konfigurierbare Nachrichtenaufbewahrung wird nicht unterstützt. Alle Nachrichten werden auf unbestimmte Zeit aufbewahrt.
- Der Ablauf von Abos wird nicht unterstützt. Abos laufen nicht ab.
- Filtern wird nicht unterstützt.
- Schemaunterstützung für Protokollzwischenspeicher
- BigQuery-Abos können erstellt werden, aber senden Sie keine Nachrichten an BigQuery
- Die Suche nach einem Zeitstempel für bestellte Abos wird nicht unterstützt.
Wenn Sie Probleme melden möchten, reichen Sie eine öffentliche Problemverfolgung ein.
Nächste Schritte
- Informationen zum Verwenden des Pub/Sub-Emulators mit Minikube finden Sie unter in diesem Blogpost.