PHP Academy · Aula

Novas tentativas, atrasos e encadeamento de tarefas

Configure tentativas e atrasos e encadeie tarefas dependentes.

Aula 3 de 413 etapas

Novas tentativas, atrasos e encadeamento de tarefas é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.

Máximo de tentativas

Defina quantas vezes uma tarefa deve ser tentada novamente antes de ser movida para failed_jobs.

<?php
class SendWelcomeEmail implements ShouldQueue
{
    public int $tries = 3; // retry up to 3 times
}

Máximo de exceções

Use $maxExceptions para limitar as novas tentativas com base na quantidade de exceções (ao contrário de tentativas, que contam todas as execuções, incluindo timeouts).

<?php
public int $maxExceptions = 3;

Intervalo entre tentativas

Defina um atraso (em segundos) entre as tentativas.

<?php
public int $backoff = 60; // wait 60 seconds before retry

// Or exponential backoff:
public function backoff(): array
{
    return [1, 5, 10]; // 1s, 5s, 10s between attempts
}

Tempo limite da tarefa

Defina um tempo máximo de execução em segundos. Se o trabalhador ultrapassá-lo, a tarefa será devolvida à fila.

<?php
public int $timeout = 120; // 2 minutes max

Despachando com atraso

Adie uma tarefa a partir do local em que ela é despachada.

<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());

fail() e released()

Dentro de handle(), chame $this->fail($exception) para marcar imediatamente a tarefa como falha ou $this->release($delay) para reenfileirá-la com um atraso.

<?php
public function handle(): void
{
    try {
        // ...
    } catch (TransientException $e) {
        $this->release(30); // re-queue in 30 seconds
    } catch (FatalException $e) {
        $this->fail($e);   // mark as failed now
    }
}

Método failed()

Defina um método failed() na tarefa para executar a limpeza quando todas as tentativas se esgotarem.

<?php
public function failed(\Throwable $exception): void
{
    // Notify team, update DB, etc.
    Log::error("Job failed: ".$exception->getMessage());
}

Encadeamento de tarefas

Encadeie tarefas para que cada uma seja executada somente depois que a anterior for concluída com sucesso.

<?php
Bus::chain([
    new DownloadFile($url),
    new ProcessFile($path),
    new NotifyUser($user),
])->dispatch();

Falhas capturadas no encadeamento

Use catch() para tratar falhas do encadeamento sem interromper toda a sequência.

<?php
Bus::chain([...])
    ->catch(fn (\Throwable $e) => Log::error($e))
    ->dispatch();

Bus::batch()

Despeche um lote de tarefas em paralelo e execute uma função de retorno quando todas forem concluídas ou quando alguma falhar.

<?php
Bus::batch([
    new ImportRow($rows[0]),
    new ImportRow($rows[1]),
])->then(fn ($b) => Log::info("All done"))
  ->catch(fn ($b, $e) => Log::error($e))
  ->dispatch();

Opções do trabalhador de fila

Inicie trabalhadores com configurações específicas de novas tentativas e tempo limite: php artisan queue:work --tries=3 --timeout=90. As configurações da tarefa substituem as configurações do trabalhador.

Resumo

Defina $tries, $backoff e $timeout na tarefa. Use release() para falhas temporárias e fail() para falhas permanentes. Encadeie tarefas sequenciais com Bus::chain().

Verificação rápida

Qual método reenfileira uma tarefa com atraso a partir de dentro de handle()?

Grátis para começar

Aprenda PHP com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
49
Aulas
195

Perguntas Frequentes

A aula “Novas tentativas, atrasos e encadeamento de tarefas” é grátis?

Sim — o texto completo de “Novas tentativas, atrasos e encadeamento de tarefas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.

O que vou aprender em “Novas tentativas, atrasos e encadeamento de tarefas”?

Configure tentativas e atrasos e encadeie tarefas dependentes. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar PHP Academy?

Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Novas tentativas, atrasos e encadeamento de tarefas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de PHP Academy?

Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceitos e drivers de filas
  2. Criação e despacho de tarefas
  3. Novas tentativas, atrasos e encadeamento de tarefas
  4. Monitoramento de filas com Laravel Horizon
← Voltar para PHP Academy