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

Você pode personalizar seu próprio esquema para novas tentativas de tarefas adicionando o elemento Nova tentativa de parâmetros em queue.xml. Essa adição permite especificar o número máximo de vezes em que tarefas com falha 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 tarefas, aumentando o intervalo linearmente entre cada nova tentativa até atingir a espera máxima e repetir indefinidamente com o intervalo máximo. Assim, os intervalos entre solicitações são de 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