Kirim email 10.000 user sekaligus? Proses laporan PDF besar? Kenapa harus bikin user nunggu? Pelajari cara Laravel Queue & Job bekerja — dan ubah aplikasimu dari lemot jadi lincah.
⏱ 10
Menit Baca
🎓
Intermediate
2025
Update Terbaru
Bayangkan kamu lagi antri di kasir minimarket. Tiba-tiba si kasir bilang, "Maaf ya, saya harus cetak laporan dulu, tunggu 5 menit." Kamu pasti kesel, kan? Nah, hal yang persis sama bisa terjadi di aplikasi web kamu — kalau kamu nggak pakai Queue & Job di Laravel. Fitur inilah yang memisahkan aplikasi "amatiran" dari aplikasi yang benar-benar production-ready.
Dalam seri 50 Artikel Belajar Laravel ini, di artikel ke-31 kita akan bahas tuntas bagaimana Queue dan Job bekerja untuk memindahkan proses berat ke background — biar user tetap happy dan aplikasimu tetap responsif. Siap? Gas!
📌 Konsep Utama
Apa Itu Queue & Job di Laravel?
Job adalah unit pekerjaan tunggal yang bisa ditunda eksekusinya. Queue adalah antrian tempat Job-job tersebut menunggu giliran diproses oleh worker di background — terpisah dari request utama user. Hasilnya: user dapat respons cepat, proses berat tetap berjalan di belakang layar.
1. Kenapa Kamu Butuh Queue? Analogi Kasir vs Chef
Coba pikirin restoran cepat saji. Kasir di depan tugasnya hanya menerima pesanan — bukan masak sendiri. Dia catat pesanan, lempar ke dapur, dan langsung layani pelanggan berikutnya. Chef di dapur masak sesuai antrian. Ini adalah persis cara kerja Queue di Laravel!
🐌
Tanpa Queue
User nunggu proses selesai
Timeout kalau proses lama
Server bisa overload
UX buruk = user kabur
🚀
Dengan Queue
User dapat respons instan
Proses jalan di background
Beban server terdistribusi
UX smooth = user senang
🔥
Fakta Menarik
Menurut penelitian Google, 53% pengguna mobile meninggalkan halaman yang loading lebih dari 3 detik. Dengan Queue, halaman kamu bisa merespons dalam milidetik meski ada proses berat yang berjalan!
2. Konfigurasi Queue & Cara Membuat Job di Laravel
Sebelum bisa menggunakan Queue Job Laravel, kamu perlu setup driver queue-nya. Laravel mendukung berbagai driver: database, redis, sqs, hingga sync untuk testing.
1
Set Driver Queue di .env
# .env
QUEUE_CONNECTION=database
2
Buat Tabel Queue di Database
# Terminal
php artisan queue:table
php artisan migrate
3
Generate Job Class
# Buat Job baru
php artisan make:job SendEmailBlast
File akan tersimpan di app/Jobs/SendEmailBlast.php
4
Isi Logic di dalam Job
// app/Jobs/SendEmailBlast.php
<?php
namespaceApp\Jobs;
useIlluminate\Bus\Queueable;
useIlluminate\Contracts\Queue\ShouldQueue;
useIlluminate\Foundation\Bus\Dispatchable;
useIlluminate\Queue\InteractsWithQueue;
useIlluminate\Queue\SerializesModels;
useApp\Models\User;
useIlluminate\Support\Facades\Mail;
classSendEmailBlastimplementsShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function__construct(publicUser$user) {}
public functionhandle(): void
{
// Kirim email ke user
Mail::to($this->user->email)
->send(new \App\Mail\NewsletterMail());
}
}
5
Dispatch Job dari Controller
// Di dalam Controller
useApp\Jobs\SendEmailBlast;
public functionsendNewsletter()
{
$users = User::all();
foreach ($usersas$user) {
// Masukkan ke antrian, bukan eksekusi langsung!
SendEmailBlast::dispatch($user);
}
returnback()->with('success', 'Email sedang dikirim di background!');
}
💡
Tips Pro
Gunakan ShouldQueue interface agar Job otomatis masuk antrian. Tanpa interface ini, Job akan dieksekusi synchronously — artinya user tetap harus nunggu. Jangan lupa implementasikan interface-nya!
3. Fitur Lanjutan: Delay, Retry, dan Failed Jobs
Queue bukan cuma "taruh job, jalankan." Ada banyak fitur canggih yang bikin sistem antrian kamu makin robust. Berikut beberapa yang wajib kamu tahu:
🔬 Fitur-Fitur Penting Queue
⏳ Delay — Tunda Eksekusi Job
// Eksekusi 10 menit kemudian
SendEmailBlast::dispatch($user)
->delay(now()->addMinutes(10));
🔄 Retry — Otomatis Coba Ulang kalau Gagal
// Di dalam class Job
publicint$tries = 3; // Coba 3x sebelum failed
publicint$timeout = 120; // Timeout 120 detik
💀 Failed Jobs — Tangani Job yang Gagal Total
// Buat tabel failed_jobs
php artisan queue:failed-table
php artisan migrate
// Lihat daftar job yang gagal
php artisan queue:failed
// Jalankan ulang job yang gagal
php artisan queue:retry all
⚡
Insight Penting
Di production, gunakan Redis sebagai queue driver — bukan database. Redis jauh lebih cepat karena beroperasi di memory. Untuk proyek kecil-menengah, driver database sudah cukup, tapi siap-siap upgrade ke Redis saat traffic naik!
4. Menjalankan Worker & Tips Queue di Production
Job yang sudah di-dispatch nggak akan diproses sendiri. Kamu perlu menjalankan Queue Worker — proses yang terus berjalan dan mengambil job dari antrian. Ini bagian krusial yang sering dilupakan developer pemula!
# Restart worker setelah deploy (WAJIB dilakukan!)
php artisan queue:restart
⚠️
Perhatian!
Di production, jangan menjalankan worker secara manual di terminal karena akan mati kalau terminal ditutup. Gunakan Supervisor (Linux process manager) atau Laravel Horizon untuk memastikan worker selalu berjalan 24/7 secara otomatis.
Perbandingan Queue Driver
Driver
Kecepatan
Penggunaan
Rekomendasi
sync
Instant
Testing/Dev
Development
database
Sedang
Tanpa infra tambahan
Kecil-Menengah
redis
Sangat Cepat
High traffic
Production
sqs
Sangat Cepat
AWS ecosystem
Enterprise/Cloud
💡
Tips Bonus
Gunakan queue priority untuk mendahulukan job penting. Misalnya: queue high untuk notifikasi pembayaran, queue default untuk email newsletter. Jalankan: php artisan queue:work --queue=high,default
📝 Kesimpulan
Queue & Job: Fondasi Aplikasi Laravel yang Scalable
Selamat, kamu sudah memahami cara kerja Queue & Job di Laravel! Mari kita recap poin-poin pentingnya:
Queue adalah antrian untuk menunda proses berat ke background
Job adalah unit pekerjaan tunggal yang didispatch ke antrian
Gunakan ShouldQueue agar Job berjalan asynchronous
Fitur delay, retry, dan failed jobs bikin sistem lebih robust
Jalankan worker dengan php artisan queue:work
Di production, gunakan Supervisor + Redis untuk performa terbaik
Dengan menguasai Queue Job Laravel, aplikasimu akan terasa jauh lebih cepat dan profesional. User nggak perlu lagi nunggu lama — dan server kamu juga bernafas lebih lega! 🚀
💬 Punya pertanyaan atau pengalaman menarik soal Queue di Laravel? Tulis di kolom komentar di bawah! Dan kalau artikel ini bermanfaat, jangan lupa share ke teman-teman yang lagi belajar Laravel juga ya. Subscribe supaya nggak ketinggalan artikel selanjutnya!
saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux
No comments:
Post a Comment