Auf dieser Seite wird erläutert, wie Pull-Warteschlangen-Code aus Aufgabenwarteschlangen zu Pub/Sub migriert wird. Pub/Sub ist jetzt die bevorzugte Methode zur Ausführung von Pull-Warteschlangen in App Engine.
Wenn Ihre Anwendung sowohl Pull- als auch Push-Warteschlangen verwendet, migrieren Sie Ihre Pull-Warteschlangen mithilfe dieser Anleitung zu Pub/Sub, bevor Sie Ihre Push-Warteschlangen in den neuen Push-Warteschlangendienst Cloud Tasks migrieren. Die Migration von Pull-Warteschlangen nach der Migration von Push-Warteschlangen zu Cloud Tasks wird nicht empfohlen, da die erforderliche Verwendung der Datei queue.yaml
wahrscheinlich ein unerwartetes Verhalten bei Cloud Tasks verursacht.
Features, die derzeit nicht in Pub/Sub verfügbar sind
Die folgenden Aufgabenwarteschlangen-Funktionen sind derzeit in Pub/Sub nicht verfügbar:
- Batching nach Tag
- Automatische Deduplizierung
Preise und Kontingente
Die Migration Ihrer Pull-Warteschlangen zu Pub/Sub kann sich auf die Preise und Kontingente Ihrer Anwendung auswirken.
Preise
Pub/Sub hat ein eigenes Preismodell. Wie bei Aufgabenwarteschlangen kann das Senden von Anfragen an Ihre App Engine-Anwendung mit Pub/Sub dazu führen, dass Ihre Anwendung Kosten verursacht.
Kontingente
Die Pub/Sub-Kontingente unterscheiden sich von den Kontingenten für Aufgabenwarteschlangen. Wie bei Aufgabenwarteschlangen kann sich das Senden von Anfragen von Pub/Sub an Ihre App Engine-Anwendung auf Ihre App Engine-Anfragekontingente auswirken.
Vor der Migration
Richten Sie die Python-Entwicklungsumgebung ein, falls Sie dies noch nicht getan haben, um eine mit Google Cloud kompatible Python-Version zu verwenden, und installieren Sie Testtools, um isoliertes Python zu erstellen. Umgebungen.In folgenden Abschnitten werden die Schritte zur Einrichtung beschrieben, bevor Sie Ihre Pull-Warteschlangen zu Pub/Sub migrieren.
Pub/Sub API aktivieren
Zur Aktivierung der Pub/Sub API klicken Sie in der API-Bibliothek für die Pub/Sub API aufAktivieren. Wenn die Schaltfläche Verwalten anstelle der Schaltfläche Aktivieren angezeigt wird, haben Sie die Pub/Sub API für Ihr Projekt bereits aktiviert und Sie müssen dies nicht noch einmal tun.
Anwendung für die Pub/Sub API authentifizieren
Sie müssen Ihre Anwendung für die Pub/Sub API authentifizieren. In diesem Abschnitt wird die Authentifizierung für zwei verschiedene Anwendungsfälle erläutert.
Wenn Sie Ihre Anwendung lokal entwickeln oder testen möchten, empfehlen wir die Verwendung eines Dienstkontos. Anleitungen zum Einrichten eines Dienstkontos und zum Verknüpfen des Dienstkontos mit Ihrer Anwendung finden Sie unter Dienstkonto-Anmeldedaten manuell abrufen und bereitstellen.
Zur Bereitstellung Ihrer Anwendung in App Engine müssen Sie keine neue Authentifizierung bereitstellen. Die Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) leiten die Authentifizierungsdetails für App Engine-Anwendungen ab.
Google Cloud CLI herunterladen
Laden Sie die Google Cloud CLI herunter und installieren Sie sie, um die gcloud CLI mit der Pub/Sub API zu verwenden, falls Sie sie nicht bereits installiert haben. Führen Sie den folgenden Befehl über Ihr Terminal aus, wenn Sie die Google Cloud CLI bereits installiert haben.
gcloud components update
Cloud-Clientbibliotheken importieren
Führen Sie die folgenden Schritte aus, um die Pub/Sub-Python-Clientbibliothek in Ihrer bestehenden App Engine-Anwendung zu verwenden:
Aktualisieren Sie die Datei
app.yaml
. Folgen Sie der Anleitung für Ihre Python-Version:Python 2
Fügen Sie für Python 2-Anwendungen die neuesten Versionen der
grpcio
-Bibliothek hinzu.Hier sehen Sie eine
app.yaml
-Beispieldatei:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest
Python 3
Geben Sie für Python 3-Anwendungen das
runtime
-Element in Ihrerapp.yaml
-Datei mit einer unterstützten Python 3-Version an. Beispiel:runtime: python310 # or another support version
Die Python 3-Laufzeit installiert Bibliotheken automatisch. Sie müssen also keine integrierten Bibliotheken aus der vorherigen Python 2-Laufzeit angeben. Wenn Ihre Python 3-Anwendung bei der Migration andere gebündelte Legacy-Dienste verwendet, können Sie weiter die erforderlichen integrierten Bibliotheken angeben. Andernfalls können Sie die unnötigen Zeilen in der
app.yaml
-Datei löschen.Aktualisieren Sie die Datei
requirements.txt
. Folgen Sie der Anleitung für Ihre Python-Version:Python 2
Fügen Sie die Cloud-Clientbibliotheken für Pub/Sub der Liste der Abhängigkeiten in der
requirements.txt
-Datei hinzu.google-cloud-pubsub
Führen Sie dann
pip install -t lib -r requirements.txt
aus, um die Liste der verfügbaren Bibliotheken für Ihre Anwendung zu aktualisieren.Python 3
Fügen Sie die Cloud-Clientbibliotheken für Pub/Sub der Liste der Abhängigkeiten in der
requirements.txt
-Datei hinzu.google-cloud-pubsub
App Engine installiert diese Abhängigkeiten während der Anwendungsbereitstellung in der Python 3-Laufzeit automatisch. Löschen Sie daher den Ordner
lib
, falls vorhanden.Wenn Ihre Anwendung in Python 2-Anwendungen integrierte oder kopierte Bibliotheken verwendet, müssen Sie diese Pfade in der
appengine_config.py
-Datei angeben, die sich im selben Ordner wie dieapp.yaml
-Datei befindet:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)
Die oben angegebene Datei
appengine_config.py
geht davon aus, dass sich der Ordnerlib
im aktuellen Arbeitsverzeichnis befindet. Das aktuelle Arbeitsverzeichnis kann jedoch, wie bei Einheitentests, abweichen. Sie können Fehler vermeiden und den vollständigen Pfad zum Ordnerlib
wie dargestellt explizit eingeben:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importieren Sie die Pub/Sub-Python-Clientbibliothek in alle Dateien, die Pull-Warteschlangen von der Task Queues API verwenden:
from google.cloud import pubsub
Pub/Sub und Pull-Warteschlangen
Funktionsvergleich
Pub/Sub sendet über eine Publisher-Abonnenten-Beziehung Arbeit an Worker. Ein Pull-Abo in Pub/Sub ist wie eine Pull-Warteschlange in Aufgabenwarteschlangen, da der Abonnent die Nachricht aus dem Thema abruft. In der folgenden Tabelle sind die Hauptfeatures für Pull-Warteschlangen in Aufgabenwarteschlangen und das zugehörige Feature für Pull-Abos in Pub/Sub aufgeführt.
Aufgabenwarteschlangen-Feature | Pub/Sub-Feature |
---|---|
Warteschlange | Thema |
Aufgabe | Meldung |
Worker | Abonnent |
Weitere Informationen zur Pub/Sub-Architektur erhalten Sie unter Cloud Pub/Sub: Skalierbarer Messaging-Dienst für Google.
Workflow-Vergleich
Im Folgenden wird ein typischer Workflow für eine Pull-Warteschlange in Aufgabenwarteschlangen und ein Pull-Abo in Pub/Sub verglichen.
Aufgabenwarteschlangen-Workflow | Pub/Sub-Workflow |
---|---|
Sie erstellen die Pull-Warteschlange | Sie erstellen das Thema und abonnieren Ihren Abonnenten (z. B. Worker) für das Thema |
Sie erstellen die Aufgabe und setzen sie in die Warteschlange | Sie erstellen die Nachricht und veröffentlichen sie im Thema |
Der Worker fordert die Freigabe der Aufgabe an | Der Abonnent ruft die Nachricht aus dem Thema ab |
Der Worker verarbeitet die Aufgabe | Der Abonnent verarbeitet die Nachricht |
Der Worker löscht die Aufgabe aus der Warteschlange | Der Abonnent bestätigt die Nachricht |
Die Freigabe läuft ab | Das Thema löscht die Nachricht, wenn alle ihre Abonnenten die Nachricht bestätigt haben |
Pull-Abos in Pub/Sub erstellen
Sie können ein Pub/Sub-Pull-Abo wie eine Pull-Warteschlange für Aufgabenwarteschlangen verwenden. Abos für ein Thema laufen nicht ab und können gleichzeitig für mehrere Worker gelten. Das bedeutet, dass eine Nachricht von mehr als einem Worker verarbeitet werden kann. Dies ist einer der primären Anwendungsfälle für Pub/Sub. Zum nochmaligen Erstellen Ihrer Pull-Warteschlangen für Aufgabenwarteschlangen als Pub/Sub-Pull-Abos erstellen Sie für jeden Worker ein Thema und abonnieren nur den zugehörigen Worker für das Thema. Dadurch wird jede Nachricht von genau einem Worker wie in Aufgabenwarteschlangen verarbeitet. Weitere Informationen zum Erstellen und Verwalten von Pull-Abos finden Sie unter Themen und Abos verwalten.
Pull-Warteschlangen löschen
Nachdem Sie Ihre Pull-Warteschlangen für Aufgabenwarteschlangen zu Pub/Sub-Pull-Abos migriert haben, löschen Sie sie mithilfe der Datei queue.yaml
aus den Aufgabenwarteschlangen. Wir empfehlen, jede Pull-Warteschlange vor der Migration der nächsten zu löschen. Dadurch wird verhindert, dass Ihre Anwendung die Arbeit dupliziert, die sie aus dem neuen Pub/Sub-Pull-Abo erhält, während Sie die anderen Pull-Warteschlangen migrieren. Wenn Sie Ihre Pull-Warteschlangen für Aufgabenwarteschlangen eine nach der anderen und nicht in einer einzelnen Bereitstellung löschen, könnte sich dies stärker auf das Bereitstellungskontingent von App Engine auswirken.
Nachdem Sie alle Pull-Warteschlangen aus Aufgabenwarteschlangen gelöscht haben, können Sie die Datei queue.yaml
aus zukünftigen Bereitstellungen Ihrer Anwendung weglassen.
Wenn Ihre Anwendung nur Pull-Warteschlangen verwendet, entfernen Sie in Ihrem Code alle Verweise auf die Task Queues API. Wenn Ihre Anwendung sowohl Pull- als auch Push-Warteschlangen verwendet, können Sie entweder die Verweise auf die Task Queues API entfernen, die nur in Dateien mit Pull-Warteschlangen vorhanden sind, oder warten, bis Sie auch die Push-Warteschlangen migriert haben und dann die Verweise auf die Task Queues API aus allen Dateien entfernen.
Nächste Schritte
- Pub/Sub-Dokumentation
- Push-Warteschlangen migrieren
- Eine praxisorientierte Anleitung finden Sie unter Migration von Pull-Warteschlangen von App Engine-Aufgabenwarteschlangen zu Pub/Sub-Codelab.