Repetir tarefas de envio com falha

As tarefas de envio processadas através de uma fila de tarefas podem falhar por vários motivos. Se um controlador não conseguir executar uma tarefa (e, por conseguinte, devolver qualquer código de estado HTTP fora do intervalo 200–299), o App Engine tenta novamente a tarefa até ter êxito.

Por predefinição, o sistema reduz gradualmente a taxa de repetição para evitar sobrecarregar a sua aplicação com demasiados pedidos, mas agenda tentativas de repetição para ocorrerem no máximo uma vez por hora até que a tarefa seja bem-sucedida.

A repetir tarefas

Pode personalizar o seu próprio esquema para novas tentativas de tarefas adicionando o elemento retry parameters em queue.yaml. Esta adição permite-lhe especificar o número máximo de vezes que as tarefas com falhas devem ser repetidas numa fila específica. Também pode definir um limite de tempo para as tentativas e controlar o intervalo entre tentativas.

O exemplo seguinte demonstra vários cenários de repetição:

  • Em fooqueue, as tarefas são repetidas até sete vezes e durante um período máximo de dois dias a partir da primeira tentativa de execução. Após a ultrapassagem de ambos os limites, a operação falha permanentemente.
  • No barqueue, o App Engine tenta repetir as tarefas, aumentando o intervalo linearmente entre cada repetição até atingir a retirada máxima e repetir indefinidamente no intervalo máximo (por isso, os intervalos entre pedidos 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, repete indefinidamente no intervalo máximo (por isso, os intervalos entre pedidos são 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, ...).
queue:
- name: fooqueue
  rate: 1/s
  retry_parameters:
    task_retry_limit: 7
    task_age_limit: 2d
- name: barqueue
  rate: 1/s
  retry_parameters:
    min_backoff_seconds: 10
    max_backoff_seconds: 200
    max_doublings: 0
- name: bazqueue
  rate: 1/s
  retry_parameters:
    min_backoff_seconds: 10
    max_backoff_seconds: 300
    max_doublings: 3

O que se segue?