Warteschlangen mit queue.yaml verwalten

Sie können zwar eine queue.yaml Datei zum Verwalten von Warteschlangen verwenden, aber die Kombination von Methoden zur Warteschlangenverwaltung kann zu unerwarteten Ergebnissen führen. In diesem Leitfaden werden die Risiken der Kombination dieser Methoden erläutert und Sie erfahren, wie Sie häufige Konfigurationsprobleme beheben.

Die Cloud Tasks API bietet eine unabhängige Schnittstelle zum App Engine-Dienst für Aufgabenwarteschlangen. Über diese Schnittstelle können Sie Warteschlangen über die Google Cloud Console oder die Google Cloud CLI verwalten. Warteschlangen, die Sie mit der Cloud Tasks API erstellen, sind über das App Engine SDK zugänglich. Das App Engine SDK ist eine Sammlung plattformspezifischer APIs, eigenständiger Tools und Laufzeitdateien. Warteschlangen, die mit dem App Engine SDK erstellt wurden, sind über die Cloud Tasks API zugänglich.

Zur Gewährleistung der Kompatibilität können Sie queue.yaml, die Konfigurationsdatei für das App Engine SDK, verwenden, um Warteschlangen für die Cloud Tasks API zu erstellen und zu konfigurieren. Die Verwaltung von Warteschlangen mit dieser Datei und der Cloud Tasks API kann jedoch zu Problemen führen, die in diesem Leitfaden beschrieben werden.

Hinweis

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 die Verwendung von queue.yaml verzichten. Die Cloud Tasks-Methoden zur Warteschlangenverwaltung bieten Ihnen mehr Optionen zum Erstellen, Aktualisieren und Löschen von Warteschlangen.

Wenn Sie bereits queue.yaml verwenden, sollten Sie nur dann zu den Cloud Tasks-Methoden zur Warteschlangenverwaltung wechseln, wenn Sie die Risiken der Kombination von Methoden zur Warteschlangenverwaltung kennen.

Methode zur Warteschlangenverwaltung erzwingen

Um die Kombination von Methoden zur Warteschlangenverwaltung zu verhindern, können Sie eine Webanwendung oder ein Befehlszeilentool zum Erstellen, Aktualisieren und Löschen von Warteschlangen erstellen. Ob dieses Tool Cloud Tasks-Methoden zur Warteschlangenverwaltung oder queue.yaml verwendet, ist ein Implementierungsdetail, das Nutzer nicht kennen müssen. Wenn Sie die Verwendung des Tools erzwingen, können Sie sicherstellen, dass die Methoden nicht versehentlich kombiniert werden. Weisen Sie dem Tool die Cloud Tasks-Rolle „Identity and Access Management“ (Queue Admin) zu und fordern Sie Nutzer auf, sich zu authentifizieren. Weitere Informationen zur Zugriffsverwaltung finden Sie unter Warteschlangenkonfiguration schützen.

Verzögerungen bei der Warteschlangenkonfiguration

Es kann mehrere Minuten dauern, bis Änderungen an der Warteschlangenkonfiguration wirksam werden. Wenn Sie beispielsweise CreateQueue oder UpdateQueue aufrufen, kann es mehrere Minuten dauern, bis Sie für die jeweilige Warteschlange erfolgreich CreateTask aufrufen können.

default-Warteschlange von App Engine

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

Wann wird die default-Warteschlange erstellt?

Wenn die default Warteschlange 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 eine default -Warteschlange angibt
  • Wenn CreateQueue oder UpdateQueue aufgerufen wird, um die default-Warteschlange zu erstellen
Welche Einschränkungen erzwingt Cloud Tasks?

Um die Kompatibilität mit App Engine zu wahren, erzwingt Cloud Tasks die folgenden Einschränkungen für die default Warteschlange:

  • In der Cloud Tasks API werden die default Warteschlange oder andere Warteschlangen nicht automatisch erstellt
  • Wenn eine Warteschlange namens default erstellt wird, muss es eine Warteschlange mit App Engine-Aufgaben sein
  • Wenn Sie GetQueue für die default-Warteschlange aufrufen, wird ein Fehler vom Typ not found zurückgegeben, wenn die Warteschlange noch nicht vorhanden ist
  • Die default Warteschlange wird erst nach ihrer Erstellung in der ListQueues Ausgabe angezeigt
  • Sie können die Konfiguration der default-Warteschlange mit dem UpdateQueue Aufruf ändern
  • Nach der Erstellung kann die default-Warteschlange nicht mehr gelöscht werden

Risiken der Kombination von Methoden zur Warteschlangenverwaltung

Für den zugrunde liegenden Dienst sind queue.yaml-Dateien maßgeblich. Wenn Sie eine queue.yaml Datei hochladen, in der ein Teil der Warteschlangen Ihres Projekts fehlt, werden diese Warteschlangen deaktiviert oder angehalten . Das gilt unabhängig davon, wie sie erstellt wurden. Wenn Sie beispielsweise über die Cloud Tasks API CreateQueue oder UpdateQueue aufrufen und anschließend eine queue.yaml-Datei hochladen, in der diese Warteschlangen fehlen, werden die Warteschlangen deaktiviert. Sie müssen die deaktivierten Warteschlangen dann wieder aktivieren.

Die Kombination von Methoden zur Warteschlangenverwaltung kann zu unerwartetem Verhalten führen. Betrachten Sie beispielsweise die folgenden Szenarien:

Szenario 1

Sie rufen CreateQueue auf, um eine Warteschlange mit dem Namen cloud-tasks-queue zu erstellen, und laden dann eine queue.yaml-Datei mit folgendem Inhalt hoch:

queue:
- name: queue-yaml-queue

Dies führt zu den folgenden Warteschlangenstatus:

  • 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.

Szenario 2

Sie deaktivieren eine Warteschlange mit der Cloud Tasks API, aber sie wird später in einer hochgeladenen queue.yaml-Datei angezeigt. Die Warteschlange wird wieder aktiviert.

Szenario 3

Sie löschen eine Warteschlange mit der Methode DeleteQueue und sie wird später in einer queue.yaml-Datei angezeigt. Das Hochladen von queue.yaml kann fehlschlagen, da Warteschlangennamen nach dem Löschen mehrere Tage nicht wiederverwendet werden dürfen.

Fehlerbehebung mit Audit-Logs

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.

Wenn beispielsweise durch das Hochladen von queue.yaml eine vorhandene Warteschlange deaktiviert wird, können Sie den folgenden Befehl ausführen, um über die com.google.appengine.legacy.queue_updated Methode einen Disabled queue QUEUE_NAME Logeintrag zurückzugeben:

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)'

Weitere Informationen finden Sie unter Logeinträge lesen.

Warteschlange wieder aktivieren, die durch das Hochladen von queue.yaml deaktiviert wurde

Wenn Sie Methoden zur Warteschlangenverwaltung kombinieren, kann durch das Hochladen einer queue.yaml Datei eine über die Cloud Tasks API erstellte Warteschlange versehentlich deaktiviert werden. Um die Warteschlange wieder zu aktivieren, können Sie entweder ResumeQueue für die Warteschlange aufrufen oder sie zu queue.yaml hinzufügen und hochladen.

Wenn Sie zuvor in der queue.yaml Konfiguration eine benutzerdefinierte Verarbeitung rate festgelegt haben, setzt ResumeQueue die Warteschlange auf die Standard-rate zurück. Dies zeigt sich auch im maxDispatchesPerSecond Feld der Antwort auf ResumeQueue.

Kontingentprobleme beheben

Wenn Sie queue.yaml zum Erstellen von Warteschlangen verwenden, hat Ihr Projekt ein Standardkontingent für die maximale Anzahl von Warteschlangen, die Sie erstellen können. Warteschlangen, die mit der Cloud Tasks API erstellt wurden, haben ebenfalls ein Standardkontingent. Wie in anderen Fällen kann das Mischen von queue.yaml- und Cloud Tasks API-Methoden zu unerwarteten Ergebnissen führen.

Wenn Sie beispielsweise Warteschlangen mit queue.yaml erstellen und dann eine Kontingenterhöhung erhalten, können bei der anschließenden Erstellung weiterer Warteschlangen mit der Cloud Tasks API Kontingentfehler auftreten. Sie können dieses Problem beheben, indem Sie Ihre Kontingente über die Google Cloud Console verwalten. Weitere Informationen finden Sie unter Kontingente über die Console verwalten.

Nächste Schritte