Pull-Warteschlangen zu Pub/Sub migrieren

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

In diesem Abschnitt werden Themen behandelt, die Sie vor der Migration Ihrer Pull-Warteschlangen zu Pub/Sub behandeln müssen.

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

Python-Clientbibliothek importieren

Führen Sie die folgenden Schritte aus, um die Pub/Sub-Python-Clientbibliothek in Ihrer App Engine-Anwendung zu verwenden:

  1. Erstellen Sie ein Verzeichnis zum Speichern Ihrer Drittanbieterbibliotheken, z. B. lib/:

    mkdir lib
  2. Kopieren Sie die erforderlichen Bibliotheken.

    Wir empfehlen die Verwendung einer pip-Anforderungsdatei, anstatt die Bibliotheken nacheinander über die Befehlszeile zu installieren. Erstellen Sie eine requirements.txt-Datei im selben Ordner wie Ihre app.yaml-Datei, wenn Sie noch keine requirements.txt-Datei haben. Fügen Sie folgende Zeile hinzu:

    google-cloud-pubsub
    

    Verwenden Sie das pip-Tool (ab Version 6) mit dem Flag -t <directory>, um die in der Datei requirements.txt angegebene Pub/Sub-Bibliothek in den Ordner zu kopieren, den Sie im vorherigen Schritt erstellt haben. Beispiel:

    pip install -t lib -r requirements.txt
    
  3. Geben Sie die RPC-Bibliothek im Abschnitt libraries Ihrer Datei app.yaml an:

    libraries:
    - name: grpcio
      version: 1.0.0
    
  4. Verwenden Sie das Modul pkg_resources, damit Ihre Anwendung die richtige Verteilung der Pub/Sub-Python-Clientbibliothek verwendet.

    Erstellen Sie eine Datei appengine_config.py im selben Ordner wie die Datei app.yaml, falls Sie noch keine haben. Fügen Sie der Datei appengine_config.py Folgendes hinzu:

    # appengine_config.py
    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')
    
  5. Importieren Sie die Pub/Sub-Python-Clientbibliothek in alle Dateien, die Pull-Warteschlangen von der Task Queues API verwenden:

    from google.cloud import pubsub_v1

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 Subscriber

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