Como executar 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. Para isso, adicione o elemento de parâmetros de nova tentativa a queue.xml. Isso permite especificar o número máximo de vezes que tarefas com falhas são repetidas em uma fila específica. Você também pode 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: 10 s, 20 s, 30 s,…, 190 s, 200 s, 200 s,…
  • Em bazqueue, o intervalo de repetição começa em 10 s, depois duplica três vezes, aumenta linearmente e, finalmente, tenta indefinidamente no intervalo máximo. Dessa forma, os intervalos entre solicitações são: 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>

A seguir