Percobaan Ulang, Penundaan, dan Perantaian Job
Konfigurasikan percobaan, penundaan, dan rangkai job yang saling bergantung.
Percobaan Ulang, Penundaan, dan Perantaian Job adalah pelajaran PHP Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar PHP Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PHP Academy mencakup 4 pelajaran total.
Percobaan Maksimum
Atur berapa kali tugas harus dicoba ulang sebelum dipindahkan ke failed_jobs.
<?php
class SendWelcomeEmail implements ShouldQueue
{
public int $tries = 3; // retry up to 3 times
}Pengecualian Maksimum
Gunakan $maxExceptions untuk membatasi percobaan ulang berdasarkan jumlah pengecualian (berbeda dari jumlah percobaan yang menghitung semua upaya, termasuk batas waktu).
<?php
public int $maxExceptions = 3;Jeda Sebelum Percobaan Ulang
Atur jeda (dalam detik) di antara percobaan ulang.
<?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
}Batas Waktu Tugas
Atur waktu eksekusi maksimum dalam detik. Jika pekerja melampaui batas tersebut, tugas dikembalikan ke antrean.
<?php
public int $timeout = 120; // 2 minutes maxMengirim Tugas dengan Penundaan
Tunda tugas dari tempat pemanggilan pengiriman.
<?php
SendReminder::dispatch($user)->delay(now()->addDay());
// Or pass a Carbon instance:
SendReminder::dispatch($user)->delay(Carbon::tomorrow());fail() dan released()
Di dalam handle(), panggil $this->fail($exception) untuk segera menandai tugas sebagai gagal, atau $this->release($delay) untuk memasukkannya kembali ke antrean dengan penundaan.
<?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
}
}Metode failed()
Definisikan metode failed() pada tugas untuk menjalankan pembersihan ketika semua percobaan telah habis.
<?php
public function failed(\Throwable $exception): void
{
// Notify team, update DB, etc.
Log::error("Job failed: ".$exception->getMessage());
}Perantaian Tugas
Rantaikan tugas agar setiap tugas hanya berjalan setelah tugas sebelumnya berhasil.
<?php
Bus::chain([
new DownloadFile($url),
new ProcessFile($path),
new NotifyUser($user),
])->dispatch();Menangani Kegagalan Rantai
Gunakan catch() untuk menangani kegagalan rantai tanpa menghentikan seluruh rantai.
<?php
Bus::chain([...])
->catch(fn (\Throwable $e) => Log::error($e))
->dispatch();Bus::batch()
Kirim sekumpulan tugas secara paralel dan jalankan fungsi panggilan balik ketika semuanya selesai atau salah satunya gagal.
<?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();Opsi Pekerja Antrean
Mulai pekerja dengan pengaturan percobaan ulang dan batas waktu tertentu: php artisan queue:work --tries=3 --timeout=90. Pengaturan tingkat tugas menggantikan pengaturan tingkat pekerja.
Ringkasan
Atur $tries, $backoff, dan $timeout pada tugas. Gunakan release() untuk kegagalan sementara dan fail() untuk kegagalan permanen. Rantaikan tugas berurutan dengan Bus::chain().
Pemeriksaan Singkat
Metode mana yang memasukkan kembali tugas ke antrean dengan penundaan dari dalam handle()?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Percobaan Ulang, Penundaan, dan Perantaian Job” gratis?
Ya — teks lengkap “Percobaan Ulang, Penundaan, dan Perantaian Job” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PHP Academy, upgrade ke CoddyKit PRO. Kursus PHP Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Percobaan Ulang, Penundaan, dan Perantaian Job”?
Konfigurasikan percobaan, penundaan, dan rangkai job yang saling bergantung. Kamu berlatih PHP Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai PHP Academy?
Tidak diperlukan pengalaman sebelumnya. PHP Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Percobaan Ulang, Penundaan, dan Perantaian Job” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran PHP Academy ini?
Ya. Setiap pelajaran PHP Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Konsep Antrean dan Driver
- Membuat dan Mengirimkan Job
- Percobaan Ulang, Penundaan, dan Perantaian Job
- Memantau Antrean dengan Laravel Horizon