Como realizar novamente tarefas push com falha

As tarefas push processadas por uma fila de tarefas podem falhar por vários motivos. Se um gerenciador falhar ao executar uma tarefa, retornando um código de status HTTP fora do intervalo de 200 a 299, o App Engine repetirá a tarefa até ter sucesso.

Por padrão, o sistema reduz gradualmente a taxa de novas tentativas para evitar sobrecarregar o aplicativo com muitas solicitações, mas programa novas tentativas com recorrência máxima de uma vez por hora até que a tarefa seja executada com sucesso.

Como repetir tarefas

É possível personalizar seu próprio esquema para novas tentativas de tarefas adicionando o elemento Nova tentativa de parâmetros em queue.yaml. Isso permite especificar o número máximo de vezes que tarefas com falhas são repetidas em uma fila específica. É possível também definir um limite de tempo para novas tentativas e controlar o intervalo entre elas.

O exemplo a seguir demonstra vários cenários de novas tentativas:

  • Em fooqueue, as tarefas são repetidas até sete vezes e por até dois dias a partir da primeira tentativa de execução. Depois que ambos os limites são atingidos, elas falham permanentemente.
  • Em barqueue, o App Engine tenta repetir as tarefas, aumentando o intervalo linearmente entre cada tentativa até alcançar a retirada máxima e reiniciar indefinidamente no intervalo máximo. Dessa forma, os intervalos entre as solicitações são: 10s, 20s, 30s,…, 190s, 200s, 200s,…
  • Em bazqueue, o intervalo de repetição começa em 10s, depois duplica três vezes, aumenta linearmente e, finalmente, repete indefinidamente no intervalo máximo. Dessa forma, os intervalos entre solicitações são: 10s, 20s, 40s, 80s, 160s, 240s, 300s, 300s ...
  <?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>

A seguir