Ponowienia, opóźnienia i łańcuchy zadań
Konfiguruj liczbę prób i opóźnienia oraz łącz zależne zadania w łańcuchy
Ponowienia, opóźnienia i łańcuchy zadań to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Maksymalna liczba prób
Ustaw, ile razy należy ponowić próbę wykonania joba, zanim zostanie przeniesiony do failed_jobs.
<?php
class SendWelcomeEmail implements ShouldQueue
{
public int $tries = 3; // retry up to 3 times
}Maksymalna liczba wyjątków
Użyj $maxExceptions, aby ograniczyć ponowienia na podstawie liczby wyjątków (w przeciwieństwie do liczby prób, która obejmuje wszystkie próby, w tym przekroczenia limitu czasu).
<?php
public int $maxExceptions = 3;Retry After
Ustaw opóźnienie (w sekundach) między kolejnymi próbami.
<?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
}Limit czasu Job
Ustaw maksymalny czas wykonywania w sekundach. Jeśli worker go przekroczy, job zostanie ponownie umieszczony w kolejce.
<?php
public int $timeout = 120; // 2 minutes maxUruchamianie z opóźnieniem
Odrocz job już w miejscu jego uruchamiania.
<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());fail() i released()
Wewnątrz handle() wywołaj $this->fail($exception), aby natychmiast oznaczyć job jako nieudany, albo $this->release($delay), aby ponownie umieścić go w kolejce z opóźnieniem.
<?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
}
}Metoda failed()
Zdefiniuj metodę failed() w jobie, aby wykonać czyszczenie po wyczerpaniu wszystkich prób.
<?php
public function failed(\Throwable $exception): void
{
// Notify team, update DB, etc.
Log::error("Job failed: ".$exception->getMessage());
}Łączenie Jobów
Połącz joby w łańcuch, aby każdy z nich był wykonywany dopiero po pomyślnym zakończeniu poprzedniego.
<?php
Bus::chain([
new DownloadFile($url),
new ProcessFile($path),
new NotifyUser($user),
])->dispatch();Obsługa błędów łańcucha
Użyj catch(), aby obsłużyć błędy łańcucha bez zatrzymywania całego łańcucha.
<?php
Bus::chain([...])
->catch(fn (\Throwable $e) => Log::error($e))
->dispatch();Bus::batch()
Uruchom równolegle partię jobów i wykonaj callback po zakończeniu wszystkich lub po wystąpieniu błędu któregokolwiek z nich.
<?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();Flagi workera kolejki
Uruchamiaj workery z określonymi ustawieniami ponowień i limitu czasu: php artisan queue:work --tries=3 --timeout=90. Ustawienia na poziomie joba zastępują ustawienia workera.
Podsumowanie
Ustaw $tries, $backoff i $timeout w jobie. Używaj release() w przypadku tymczasowych błędów, a fail() w przypadku trwałych. Łącz sekwencyjne joby za pomocą Bus::chain().
Szybkie sprawdzenie
Jaka metoda ponownie umieszcza job w kolejce z opóźnieniem, gdy zostanie wywołana wewnątrz handle()?
Często zadawane pytania
Czy lekcja „Ponowienia, opóźnienia i łańcuchy zadań” jest bezpłatna?
Tak — pełny tekst „Ponowienia, opóźnienia i łańcuchy zadań” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ponowienia, opóźnienia i łańcuchy zadań”?
Konfiguruj liczbę prób i opóźnienia oraz łącz zależne zadania w łańcuchy Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Ponowienia, opóźnienia i łańcuchy zadań”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Koncepcje kolejek i sterowniki
- Tworzenie i uruchamianie zadań
- Ponowienia, opóźnienia i łańcuchy zadań
- Monitorowanie kolejek za pomocą Laravel Horizon