Pull-Warteschlangen zu Pub/Sub migrieren (Python)

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:

  1. 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 Ihrer app.yaml-Datei mit einer unterstützten Python 3-Version an. Beispiele:

    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.

  2. 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.

  3. 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 die app.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 Ordner lib im aktuellen Arbeitsverzeichnis befindet. Das aktuelle Arbeitsverzeichnis kann jedoch, wie bei Einheitentests, abweichen. Sie können Fehler vermeiden und den vollständigen Pfad zum Ordner lib wie dargestellt explizit eingeben:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. 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