PHP Academy · Lektion

Job-Wiederholungen, Verzögerungen und Verkettung

Konfigurieren Sie Versuche und Verzögerungen und verketten Sie voneinander abhängige Jobs.

Lektion 3 von 413 Schritte

Job-Wiederholungen, Verzögerungen und Verkettung ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Maximale Anzahl von Versuchen

Legen Sie fest, wie oft ein Job wiederholt werden soll, bevor er nach failed_jobs verschoben wird.

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

Maximale Anzahl von Ausnahmen

Verwenden Sie $maxExceptions, um Wiederholungen anhand der Anzahl von Ausnahmen zu begrenzen (im Gegensatz zu attempts, bei denen alle Versuche einschließlich Timeouts gezählt werden).

<?php
public int $maxExceptions = 3;

Wartezeit vor dem erneuten Versuch

Legen Sie eine Verzögerung in Sekunden zwischen Wiederholungsversuchen fest.

<?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
}

Job-Timeout

Legen Sie eine maximale Ausführungszeit in Sekunden fest. Wenn der Worker diese überschreitet, wird der Job wieder in die Queue eingereiht.

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

Dispatching mit Verzögerung

Verzögern Sie einen Job bereits an der Stelle, an der er dispatcht wird.

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

fail() und released()

Rufen Sie innerhalb von handle() $this->fail($exception) auf, um den Job sofort als fehlgeschlagen zu markieren, oder $this->release($delay), um ihn mit einer Verzögerung erneut in die Queue einzureihen.

<?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
    }
}

failed()-Methode

Definieren Sie eine failed()-Methode am Job, um nach Ausschöpfung aller Versuche Aufräumarbeiten auszuführen.

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

Job-Ketten

Verketten Sie Jobs so, dass jeder erst ausgeführt wird, nachdem der vorherige erfolgreich abgeschlossen wurde.

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

Fehler in Ketten abfangen

Verwenden Sie catch(), um Fehler in einer Kette zu behandeln, ohne die gesamte Kette anzuhalten.

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

Bus::batch()

Dispatchen Sie mehrere Jobs parallel und führen Sie einen Callback aus, wenn alle abgeschlossen sind oder einer fehlschlägt.

<?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();

Flags für Queue-Worker

Starten Sie Worker mit bestimmten Einstellungen für Wiederholungsversuche und Timeouts: php artisan queue:work --tries=3 --timeout=90. Einstellungen auf Jobebene überschreiben Einstellungen auf Workerebene.

Zusammenfassung

Legen Sie $tries, $backoff und $timeout am Job fest. Verwenden Sie release() für vorübergehende Fehler und fail() für dauerhafte Fehler. Verketten Sie sequenzielle Jobs mit Bus::chain().

Schnelltest

Welche Methode reiht einen Job innerhalb von handle() mit einer Verzögerung erneut in die Queue ein?

Kostenlos starten

Lerne PHP mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
49
Lektionen
195

Häufig gestellte Fragen

Ist die Lektion „Job-Wiederholungen, Verzögerungen und Verkettung“ kostenlos?

Ja — der vollständige Text von „Job-Wiederholungen, Verzögerungen und Verkettung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Job-Wiederholungen, Verzögerungen und Verkettung“?

Konfigurieren Sie Versuche und Verzögerungen und verketten Sie voneinander abhängige Jobs. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um PHP Academy zu starten?

Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Job-Wiederholungen, Verzögerungen und Verkettung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?

Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Konzepte und Treiber von Queues
  2. Jobs erstellen und auslösen
  3. Job-Wiederholungen, Verzögerungen und Verkettung
  4. Queues mit Laravel Horizon überwachen
← Zurück zu PHP Academy