Queue Management oderqueue.yaml verwenden

Auf dieser Seite werden die Unterschiede zwischen der Verwendung der Cloud Tasks API zum Verwalten von Warteschlangen und dem Hochladen einer queue.yaml-Datei von Cloud Tasks erläutert. 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 über die Console oder mit dem Befehl gcloud möglich. Warteschlangen, die über die Cloud Tasks API erstellt werden, sind über das App Engine SDK zugänglich und umgekehrt. Zur Aufrechterhaltung der Kompatibilität können Sie mit der vom App Engine SDK verwendeten Konfigurationsdatei queue.yaml auch Warteschlangen erstellen und konfigurieren, die über die Cloud Tasks API verwendet werden sollen. Wenn Sie die Konfiguration über eine Datei mit der Konfiguration über die Cloud Tasks API kombinieren, kann dies 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 Sie eine queue.yaml hochladen, bei der vorhandene Warteschlangen in Ihrem Projekt ausgelassen werden, unabhängig davon, wie sie erstellt wurden, werden diese Warteschlangen deaktiviert oder pausiert. 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 folgenden Anleitung wird erläutert, wie Sie eine deaktivierte Warteschlange fortsetzen.

Ä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 Cloud Tasks oder App Engine bisher noch nicht genutzt haben, sollten Sie Ihre Warteschlangen ausschließlich mit der Cloud Tasks API verwalten und vermeiden, dass queue.yaml insgesamt verwendet wird. 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-Nutzer sind, sollten Sie nur dann zu den Warteschlangenverwaltungsmethoden wechseln, wenn Sie die Fehler bei der Kombination von queue.yaml mit Cloud Tasks-Methoden zur Warteschlangenverwaltung kennen.

Wenn Sie verhindern möchten, dass Nutzer Aufgabenverwaltungsmethoden miteinander kombinieren, können Sie eine Webanwendung oder ein Befehlszeilentool erstellen, die alle Nutzer zum Erstellen, Aktualisieren und Löschen von Warteschlangen verwenden müssen. Ob dieses Tool Cloud Tasks-Methoden zur Warteschlangenverwaltung oder queue.yaml verwendet, ist ein Implementierungsdetail des Tools, über das sich die Nutzer keine Gedanken machen müssen. Wenn Nutzer das Tool verwenden müssen, können Sie dafür sorgen, dass sich die Warteschlangenverwaltungsmethoden von Cloud Tasks und die Verwendung von queue.yaml nicht versehentlich vermischen. Um die Verwendung eines solchen Tools zu erzwingen, können Sie dem Tool Warteschlangenadministratorrollen zuweisen und Nutzer müssen sich für die Verwendung des Tools authentifizieren müssen. Weitere Informationen zur Zugriffsverwaltung finden Sie unter Sichere Warteschlangenkonfiguration.

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 wird, wird mit der Methode com.google.appengine.legacy.queue_updated im Audit-Log die Meldung „Warteschlange deaktiviert ‚[QUEUE_NAME]‘“ 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 dies zu beheben, können Sie in der Google Cloud Console auf der Seite „Kontingente“ unter Kontingente bearbeiten eine Anfrage stellen.

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

  • Informationen zu den in der RPC Cloud Tasks API verfügbaren Methoden finden Sie in den Referenzdokumenten.
  • Informationen zu den in der REST Cloud Tasks API verfügbaren Methoden finden Sie in den Referenzdokumenten.
  • Weitere Informationen zu queue.yaml