Warteschlangenverwaltung vs. queue.yaml

Auf dieser Seite wird erläutert, wie sich die Verwendung der Cloud Tasks API zum Verwalten von Warteschlangen und das Hochladen einer queue.yaml- oder queue.xml-Cloud Tasks-Datei zum selben Zweck unterscheiden. Außerdem werden die Schwierigkeiten beschrieben, wenn beide Methoden kombiniert werden, sowie Lösungsmöglichkeiten für häufig auftretende Probleme.

Einführung

Die Cloud Tasks API ist eine von App Engine unabhängige Schnittstelle für den Zugriff auf den App Engine-Dienst für Aufgabenwarteschlangen. Über diese Schnittstelle können Sie Warteschlangen verwalten. Dies ist auch in der Konsole mithilfe des Befehls gcloud möglich. In der Cloud Tasks API erstellte Warteschlangen sind über das App Engine SDK zugänglich und umgekehrt. Zur Gewährleistung der Kompatibilität können Sie mithilfe der vom App Engine SDK verwendeten Konfigurationsdatei queue.yaml auch Warteschlangen erstellen und konfigurieren, die dann über die Cloud Tasks API genutzt werden. Die Kombination der Konfiguration mithilfe einer Datei mit der Konfiguration über die Cloud Tasks API kann jedoch unerwartete Folgen haben.

Probleme bei der kombinierten Verwendung von queue.yaml und Cloud Tasks-Methoden zur Warteschlangenverwaltung

Für den zugrunde liegenden Dienst sind queue.yaml Dateien maßgeblich. Wenn in der hochgeladenen Datei queue.yaml ein Teil der Warteschlangen Ihres Projekts fehlt, werden diese Warteschlangen deaktiviert oder angehalten. Falls Sie daher über die Cloud Tasks API CreateQueue oder UpdateQueue aufrufen und anschließend die Datei queue.yaml ohne diese Warteschlangen hochladen, werden die in den Cloud Tasks-Aufrufen erstellten Warteschlangen deaktiviert.

Stellen Sie sich folgendes Szenario vor:

  1. Rufen Sie CreateQueue auf, um eine Warteschlange mit dem Namen "cloud-task-queue" zu erstellen.
  2. Erstellen Sie eine queue.yaml-Datei mit folgendem Inhalt:

    queue:
    - name: queue-yaml-queue
    

Für die Warteschlangen in diesem Projekt gilt nun folgender Status: Der Status der Warteschlange mit dem Namen "cloud-tasks-queue" und aller anderen bisher vorhandenen Warteschlangen ist DISABLED. Der Status der Warteschlange mit dem Namen "queue-yaml-queue" ist RUNNING.

Dieses Verhalten kann zu unerwarteten Ergebnissen führen, wenn Sie Warteschlangen über die Cloud Tasks API erstellen. In der Anleitung weiter unten wird gezeigt, wie Sie eine deaktivierte Warteschlange wieder aktivieren.

Ähnlich verhält es sich, wenn eine in der Cloud Tasks API deaktivierte Warteschlange später in einer hochgeladenen queue.yaml-Datei auftaucht. Diese Warteschlange wird dann fortgesetzt.

Wenn eine Warteschlange mit der Methode DeleteQueue gelöscht wird und später in einer queue.yaml-Datei enthalten ist, kann das Hochladen der queue.yaml-Datei fehlschlagen, da Warteschlangennamen nach dem Löschen mehrere Tage nicht wiederverwendet werden dürfen.

Best Practices

Wenn Sie zum ersten Mal mit Cloud Tasks oder App Engine arbeiten, sollten Sie Ihre Warteschlangen ausschließlich mit der Cloud Tasks API verwalten und auf den Einsatz von queue.yaml und queue.xml verzichten. Die Cloud Tasks-Methoden zur Warteschlangenverwaltung bieten Nutzern beim Erstellen, Aktualisieren und Löschen von Warteschlangen mehr Flexibilität.

Wenn Sie jedoch bereits queue.yaml oder queue.xml nutzen, sollten Sie nur dann zu diesen Methoden der Warteschlangenverwaltung übergehen, wenn Sie wissen, welche Schwierigkeiten bei der gleichzeitigen Anwendung von queue.yaml und Cloud Tasks-Verwaltungsmethoden für Warteschlangen auftreten können.

Sie können die Verwendung von nur einer Konfigurationsmethode erzwingen, wenn Sie den Zugriff auf Aktivitäten zur Warteschlangenverwaltung mithilfe von Gruppen und Berechtigungen steuern. Eine Anleitung finden Sie unter Warteschlangenkonfiguration sichern.

Debugging

In den Audit-Logs zur Administratoraktivität des Projekts können Sie sich über den Verlauf der Änderungen an der Warteschlangenkonfiguration einschließlich Erstell-, Aktualisierungs- und Löschvorgängen von Warteschlangen informieren:

    gcloud logging read \
      'protoPayload.methodName=
       (com.google.appengine.legacy.queue_created OR
        com.google.appengine.legacy.queue_updated OR
        google.cloud.tasks.v2.CloudTasks.CreateQueue OR
        google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
        google.cloud.tasks.v2.CloudTasks.DeleteQueue)'

Wenn beispielsweise eine vorhandene Warteschlange durch einen queue.yaml-Upload deaktiviert ist, wird mit der Methode com.google.appengine.legacy.queue_updated im Audit-Log die Meldung "Warteschlange '[NAME_DER_WARTESCHLANGE]' deaktiviert" angezeigt.

So setzen Sie eine Warteschlange fort, die durch einen queue.yaml-Upload deaktiviert wurde.

Wenn Sie queue.yaml zusammen mit den Cloud Tasks-Methoden zur Warteschlangenverwaltung verwenden, kann durch das Hochladen einer queue.yaml-Datei eine über die Cloud Tasks API erstellte Warteschlange versehentlich deaktiviert werden.

Sie können entweder ResumeQueue für die Warteschlange aufrufen oder die Warteschlange in die Datei queue.yaml aufnehmen und hochladen, um die Warteschlange fortzusetzen. Wenn Sie für die Warteschlange zuvor in der Konfigurationsdatei queue.yaml eine benutzerdefinierte Verarbeitungs-rate festgelegt haben, setzt ResumeQueue die Warteschlange auf die Standard-rate zurück. Dies zeigt sich auch im Feld maxDispatchesPerSecond der Antwort auf ResumeQueue.

Kontingente

Wenn Sie queue.yaml zum Erstellen von Warteschlangen verwenden, können Sie standardmäßig maximal 100 Warteschlangen erstellen. Warteschlangen, die mit der Cloud Tasks API erstellt wurden, haben standardmäßig maximal 1.000 Warteschlangen. Wie in anderen Fällen kann das gemeinsame Verwenden von queue.yaml und Cloud Tasks API-Methoden zu unerwarteten Ergebnissen führen. Angenommen, Sie erstellen einige Warteschlangen mit queue.yaml und erhalten dann eine Kontingenterhöhung auf beispielsweise 2.000. Wenn Sie anschließend die Cloud Tasks API-Methode zum Erstellen weiterer Warteschlangen verwenden, werden Kontingentfehler zurückgegeben. Um dieses Problem zu beheben, reichen Sie über Kontingente bearbeiten auf der Seite Kontingente der Cloud Console eine Anfrage ein.

Weitere Informationen zu Cloud Tasks-Methoden zur Warteschlangenverwaltung

Warteschlangenkonfiguration und Verzögerung des Warteschlangenstarts

Änderungen an der Warteschlangenkonfiguration treten unter Umständen erst nach mehreren Minuten in Kraft. Wenn Sie beispielsweise CreateQueue oder UpdateQueue aufrufen, können mehrere Minuten vergehen, bevor Sie CreateTask für die jeweilige Warteschlange erfolgreich aufrufen können.

Cloud Tasks und die default-App Engine-Warteschlange default

Die App Engine-Warteschlange mit dem Namen "default" wird im App Engine SDK und in der Cloud Tasks API gesondert behandelt.

Wenn die Warteschlange default noch nicht vorhanden ist, wird sie in den folgenden Situationen erstellt:

  1. Wenn eine Aufgabe erstmals mit dem App Engine SDK zur default-Warteschlange hinzugefügt wird.
  2. Wenn eine queue.yaml-Datei hochgeladen wird, die eine default-Warteschlange angibt.
  3. Wenn CreateQueue oder UpdateQueue aufgerufen wird, um die Warteschlange default zu erstellen.

Cloud Tasks erzwingt folgende Einschränkungen, um die Kompatibilität mit App Engine zu wahren:

  1. Wenn eine Warteschlange namens "default" erstellt wird, muss es eine Warteschlange mit App Engine-Aufgaben sein.
  2. Nutzer können die default-Warteschlange nach dem Erstellen nicht mehr löschen.

In der Cloud Tasks API gilt für die default-Warteschlange außerdem Folgendes:

  1. In der Cloud Tasks API werden die Warteschlange default oder andere Warteschlangen nicht automatisch erstellt.
  2. Wie bei jeder anderen Warteschlange führt der Aufruf von GetQueue für die Warteschlange default zu einem Fehler "Nicht gefunden", wenn der Aufruf vor Erstellung der Warteschlange erfolgt ist.
  3. Analog dazu wird die Warteschlange default in der Ausgabe von ListQueues nicht angezeigt, wenn die Warteschlange noch nicht erstellt wurde.
  4. Die Konfiguration der Warteschlange default kann mit dem Aufruf von UpdateQueue geändert werden.

Nächste Schritte