Jobforsøg, forsinkelser og chaining
Konfigurér forsøg og forsinkelser, og kæd afhængige jobs sammen.
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 maxAfsendelse 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()?
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
- Købegreber og drivere
- Oprettelse og dispatching af jobs
- Jobforsøg, forsinkelser og chaining
- Overvågning af køer med Laravel Horizon