Fehlgeschlagene Push-Aufgaben wiederholen

Push-Aufgaben aus Aufgabenwarteschlangen können aus verschiedenen Gründen fehlschlagen. Wenn eine Aufgabe nicht ausgeführt werden kann, d. h., wenn ein HTTP-Statuscode außerhalb des Bereichs 200–299 ausgegeben wird, wiederholt App Engine die Aufgabe so oft, bis die Ausführung erfolgreich ist.

Standardmäßig verringert das System die Wiederholungsrate nach und nach, um die Anwendung nicht mit zu vielen Anfragen zu überlasten. Die Wiederholungsversuche werden jedoch mindestens einmal pro Stunde durchgeführt, bis die Aufgabe erfolgreich ist.

Fehlgeschlagene Aufgaben wiederholen

Sie können Ihr eigenes Schema für das Wiederholen von Aufgaben anpassen. Dazu fügen Sie das Element retry_parameters in die Datei queue.xml ein. Durch diese Ergänzung können Sie die maximale Anzahl an Wiederholungsversuchen für fehlgeschlagene Aufgaben in einer bestimmten Warteschlange angeben. Außerdem können Sie ein Zeitlimit für Wiederholungsversuche festlegen und den Zeitabstand zwischen den Versuchen individuell steuern.

Im folgenden Beispiel werden verschiedene Wiederholungsszenarien demonstriert:

  • In fooqueue werden Aufgaben bis zu siebenmal und bis zu zwei Tage nach dem ersten Ausführungsversuch wiederholt. Nachdem beide Limits überschritten wurden, gilt die Ausführung als endgültig gescheitert.
  • In barqueue versucht App Engine, Aufgaben zu wiederholen, wobei das Intervall zwischen nachfolgenden Wiederholungsversuchen linear erhöht wird, bis der maximale Backoff erreicht ist. Daraufhin finden Wiederholungen auf unbestimmte Zeit nach jeweils dem maximalen Intervall statt (die Intervalle zwischen den Anfragen sind 10 s, 20 s, 30 s..., 190 s, 200 s, 200 s...).
  • In bazqueue beginnt das Wiederholungsintervall bei 10 s, verdoppelt sich dreimal und steigt dann linear bis zum maximalen Intervall an, mit dem auf unbestimmte Zeit wiederholt wird (die Intervalle zwischen den Anfragen sind also 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, ...).
<?xml version="1.0" encoding="utf-8"?>
<queue-entries>
  <queue>
    <name>fooqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <task-retry-limit>7</task-retry-limit>
      <task-age-limit>2d</task-age-limit>
    </retry-parameters>
  </queue>
  <queue>
    <name>barqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <min-backoff-seconds>10</min-backoff-seconds>
      <max-backoff-seconds>200</max-backoff-seconds>
      <max-doublings>0</max-doublings>
    </retry-parameters>
  </queue>
  <queue>
    <name>bazqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <min-backoff-seconds>10</min-backoff-seconds>
      <max-backoff-seconds>300</max-backoff-seconds>
      <max-doublings>3</max-doublings>
    </retry-parameters>
  </queue>
</queue-entries>

Nächste Schritte