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:
- Rufen Sie
CreateQueue
auf, um eine Warteschlange mit dem Namen "cloud-task-queue" zu erstellen. 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:
- Wenn eine Aufgabe erstmals mit dem App Engine SDK zur
default
-Warteschlange hinzugefügt wird. - Wenn eine
queue.yaml
-Datei hochgeladen wird, die einedefault
-Warteschlange angibt. - Wenn
CreateQueue
oderUpdateQueue
aufgerufen wird, um die Warteschlangedefault
zu erstellen.
Cloud Tasks erzwingt folgende Einschränkungen, um die Kompatibilität mit App Engine zu wahren:
- Wenn eine Warteschlange namens "default" erstellt wird, muss es eine Warteschlange mit App Engine-Aufgaben sein.
- 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:
- In der Cloud Tasks API werden die Warteschlange
default
oder andere Warteschlangen nicht automatisch erstellt. - Wie bei jeder anderen Warteschlange führt der Aufruf von
GetQueue
für die Warteschlangedefault
zu einem Fehler "Nicht gefunden", wenn der Aufruf vor Erstellung der Warteschlange erfolgt ist. - Analog dazu wird die Warteschlange
default
in der Ausgabe vonListQueues
nicht angezeigt, wenn die Warteschlange noch nicht erstellt wurde. - Die Konfiguration der Warteschlange
default
kann mit dem Aufruf vonUpdateQueue
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