0Pricing
PHP Academy · Lekcja

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 max

Uruchamianie 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

  1. Koncepcje kolejek i sterowniki
  2. Tworzenie i uruchamianie zadań
  3. Ponowienia, opóźnienia i łańcuchy zadań
  4. Monitorowanie kolejek za pomocą Laravel Horizon
← Powrót do PHP Academy