Warteschlangenverwaltung oder queue.yaml verwenden

Auf dieser Seite wird erläutert, wie sich die Verwendung der Cloud Tasks API zum Verwalten von Warteschlangen und das Hochladen einer queue.yaml-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.

Einleitung

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, Dazu gehören auch die Console oder der Befehl gcloud. In der Cloud Tasks API erstellte Warteschlangen sind über das App Engine SDK zugänglich und umgekehrt. Zur Aufrechterhaltung der Kompatibilität können Sie die Konfiguration Datei, die vom App Engine SDK verwendet wird, queue.yaml, auch zum Erstellen und Konfigurieren Warteschlangen, die über die Cloud Tasks API verwendet werden sollen Die Kombination der Konfiguration über eine Datei mit Konfiguration über die Cloud Tasks API kann 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 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-Nutzer sind, sollten Sie nur dann zu einer anderen Methode zur Warteschlangenverwaltung wechseln, wenn Sie wissen, Fallstricke bei der kombinierten Verwendung von queue.yaml mit Cloud Tasks-Methoden zur Warteschlangenverwaltung

Um zu verhindern, dass Nutzer verschiedene Methoden zur Aufgabenverwaltung verwenden, können Sie eine Webanwendung oder ein Befehlszeilentool erstellen, die bzw. das alle Nutzer zum Erstellen, Aktualisieren und Löschen von Warteschlangen verwenden müssen. Ob dieses Tool die Cloud Tasks-Methoden zur Warteschlangenverwaltung oder queue.yaml verwendet, ist ein Implementierungsdetail des Tools, über das sich Nutzer keine Gedanken machen müssen. Wenn Nutzende das Tool verwenden müssen, können Sie sicherstellen, dass nicht versehentlich Cloud Tasks-Methoden zur Warteschlangenverwaltung und queue.yaml verwenden. Um die Verwendung eines solchen Tools zu erzwingen, können Sie dem Tool Rollen als Warteschlangenadministrator zuweisen. und Nutzer müssen sich authentifizieren, um das Tool verwenden zu können. Weitere Informationen zur Zugriffsverwaltung finden Sie unter Konfiguration sicherer Warteschlangen.

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 dies zu beheben, Sie können über Kontingente bearbeiten auf der Seite „Kontingente“ von in der Google Cloud Console.

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