Riesecuzione di attività push non riuscite

L'elaborazione delle attività push tramite una coda di attività può non riuscire per diversi motivi. Se un gestore non riesce a eseguire un'attività (e quindi restituisce un codice di stato HTTP al di fuori dell'intervallo 200-299), App Engine riprova l'attività finché non va a buon fine.

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

Nuovi tentativi per le attività

Puoi personalizzare il tuo schema per i tentativi di ripetizione delle attività aggiungendo l'elemento retry parameters in queue.yaml. Questa aggiunta ti consente di specificare il numero massimo di tentativi per le attività non riuscite in una coda specifica. Puoi anche impostare un limite di tempo per i tentativi e controllare l'intervallo tra un tentativo e l'altro.

L'esempio seguente mostra vari scenari di nuovi tentativi:

  • In fooqueue, i tentativi di esecuzione delle attività vengono ripetuti fino a sette volte e per un massimo di due giorni dal primo tentativo di esecuzione. Dopo aver superato entrambi i limiti, l'operazione non andrà a buon fine in modo permanente.
  • In barqueue, App Engine tenta di ripetere le attività, aumentando l'intervallo in modo lineare tra un tentativo e l'altro fino a raggiungere il backoff massimo e riprovando indefinitamente all'intervallo massimo (quindi gli intervalli tra le richieste sono 10 s, 20 s, 30 s, ..., 190 s, 200 s, 200 s, ...).
  • In bazqueue, l'intervallo tra i tentativi inizia a 10 secondi, poi raddoppia tre volte, aumenta in modo lineare e infine i tentativi vengono eseguiti a intervalli massimi (quindi gli intervalli tra le richieste sono 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>

Passaggi successivi