Riesecuzione di attività push non riuscite

Le attività push elaborate tramite una coda di attività possono non riuscire per diversi motivi. Se un gestore non riesce a eseguire un'attività (e pertanto restituisce un codice di stato HTTP al di fuori dell'intervallo 200-299), App Engine riprova a eseguire l'attività finché l'attività non viene completata correttamente.

Per impostazione predefinita, il sistema riduce gradualmente la percentuale di nuovi tentativi per evitare di sovraccaricare l'applicazione con troppe richieste, ma pianifica i nuovi tentativi in modo che si ripetano al massimo una volta l'ora fino al completamento dell'attività.

Nuovo tentativo delle attività

Puoi personalizzare il tuo schema per i nuovi tentativi di attività aggiungendo l'elemento riprova in queue.yaml. Questa aggiunta consente di specificare il numero massimo di volte in cui è possibile riprovare le attività non riuscite in una coda specifica. Puoi anche impostare un limite di tempo per i nuovi tentativi e controllare l'intervallo tra un tentativo e l'altro.

L'esempio seguente illustra vari scenari di nuovo tentativo:

  • In fooqueue, vengono riprovati le attività per un massimo di sette volte e per un massimo di due giorni dal primo tentativo di esecuzione. Dopo il superamento di entrambi i limiti, l'errore interessa definitivamente.
  • In barqueue, App Engine tenta di riprovare le attività, aumentando l'intervallo in modo lineare tra un nuovo tentativo e l'altro fino a raggiungere il backoff massimo e riprovando all'intervallo massimo (quindi gli intervalli tra le richieste sono 10, 20, 30 secondi, ..., 190, 200, 200 secondi e così via).
  • In bazqueue, l'intervallo tra i nuovi tentativi inizia da 10 secondi, poi raddoppia tre volte, quindi aumenta in modo lineare e infine riprova all'infinito nell'intervallo massimo (quindi gli intervalli tra le richieste sono 10, 20, 40, 80, 160, 240, 300, 300 secondi e così via).
  <?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>

Passaggi successivi