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 quindi restituisce qualsiasi codice di stato HTTP che non rientra nell'intervallo 200-299), App Engine riprova a eseguire l'attività finché l'operazione non va a buon fine.

Per impostazione predefinita, il sistema riduce gradualmente la frequenza di nuovi tentativi per evitare di sovraccaricare l'applicazione con troppe richieste, ma pianifica i tentativi di ripetizione al massimo una volta all'ora finché l'attività non viene completata.

Nuovo tentativo di esecuzione delle attività

Puoi personalizzare il tuo schema per i nuovi tentativi di attività aggiungendo l'elemento retry parameters in queue.xml. Questa aggiunta consente di specificare il numero massimo di volte in cui 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 i tentativi.

L'esempio seguente illustra vari scenari di nuovo tentativo:

  • In fooqueue, le attività vengono tentate fino a sette volte e per un massimo di due giorni dal primo tentativo di esecuzione. Una volta superati entrambi i limiti, l'operazione non andrà a buon fine in modo definitivo.
  • In barqueue, App Engine tenta di riprovare le attività, aumentando l'intervallo in modo lineare tra ogni nuovo tentativo fino a raggiungere il backoff massimo e riprovando a tempo indeterminato 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 diversi tentativi inizia a 10 secondi, per poi raddoppiare tre volte, poi aumentare in modo lineare e, infine, riprovare a tempo indeterminato all'intervallo massimo (quindi gli intervalli tra le richieste sono 10, 20, 40, 80, 160, 240, 300, 300 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