PHP Academy · Lektion

Jobforsøg, forsinkelser og chaining

Konfigurér forsøg og forsinkelser, og kæd afhængige jobs sammen.

Lektion 3 af 413 trin

Jobforsøg, forsinkelser og chaining er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.

Maksimalt antal forsøg

Angiv, hvor mange gange et job skal prøves igen, før det flyttes til failed_jobs.

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

Maksimalt antal undtagelser

Brug $maxExceptions til at begrænse antallet af forsøg baseret på antallet af undtagelser (i modsætning til forsøg, som tæller alle forsøg inklusive timeouts).

<?php
public int $maxExceptions = 3;

Ventetid før nyt forsøg

Angiv en forsinkelse i sekunder mellem forsøgene.

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

Tidsgrænse for job

Angiv en maksimal udførelsestid i sekunder. Hvis arbejdsprocessen overskrider den, lægges jobbet tilbage i køen.

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

Afsendelse med forsinkelse

Forsink et job fra det sted i koden, hvor det sendes til køen.

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

fail() og released()

Inde i handle() kan du kalde $this->fail($exception) for straks at markere jobbet som mislykket eller $this->release($delay) for at lægge det tilbage i køen med en forsinkelse.

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

Metoden failed()

Definér metoden failed() på jobbet for at udføre oprydning, når alle forsøg er opbrugt.

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

Kædning af jobs

Kæd jobs, så hvert job først kører, når det foregående er gennemført.

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

Håndtering af fejl i jobkæder

Brug catch() til at håndtere fejl i kæden uden at stoppe hele kæden.

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

Bus::batch()

Send en gruppe jobs til parallel behandling, og kør en callback, når alle er gennemført, eller et af dem mislykkes.

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

Indstillinger for køarbejdere

Start arbejdsprocesser med bestemte indstillinger for forsøg igen og tidsgrænse: php artisan queue:work --tries=3 --timeout=90. Indstillinger på jobniveau tilsidesætter indstillinger på arbejdsprocesniveau.

Opsummering

Angiv $tries, $backoff og $timeout på jobbet. Brug release() ved midlertidige fejl og fail() ved permanente fejl. Kæd sekventielle jobs med Bus::chain().

Hurtigt tjek

Hvilken metode lægger et job tilbage i køen med en forsinkelse fra handle()?

Gratis at komme i gang

Lær PHP med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
49
Lektioner
195

Ofte stillede spørgsmål

Er lektionen “Jobforsøg, forsinkelser og chaining” gratis?

Ja — hele teksten til “Jobforsøg, forsinkelser og chaining” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Jobforsøg, forsinkelser og chaining”?

Konfigurér forsøg og forsinkelser, og kæd afhængige jobs sammen. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på PHP Academy?

Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Jobforsøg, forsinkelser og chaining”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne PHP Academy-lektion?

Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Købegreber og drivere
  2. Oprettelse og dispatching af jobs
  3. Jobforsøg, forsinkelser og chaining
  4. Overvågning af køer med Laravel Horizon
← Tilbage til PHP Academy