Laravel Queue & Job: Panduan Lengkap

Apa Itu Queue & Job di Laravel?
Queue di Laravel adalah sistem yang memungkinkan kita mengeksekusi tugas di latar belakang tanpa mengganggu proses utama aplikasi. Sebuah "job" adalah tugas yang dijalankan dalam sistem queue ini.
Mengapa Menggunakan Queue?
Menggunakan queue sangat berguna untuk meningkatkan performa aplikasi, terutama untuk tugas-tugas berat seperti:
- Mengirim email
- Memproses gambar atau video
- Sinkronisasi data ke sistem eksternal
Contoh Kasus Penggunaan Queue
Misalnya, saat pengguna mendaftar dan kita perlu mengirim email verifikasi. Jika dilakukan secara langsung, pengguna harus menunggu lama. Dengan queue, kita bisa memprosesnya di latar belakang.
Konsep Dasar Queue di Laravel
Bagaimana Queue Bekerja?
Queue menyimpan job dalam antrean yang akan dieksekusi oleh worker. Worker ini bisa berjalan secara otomatis atau dijadwalkan.
Driver Queue yang Tersedia di Laravel
Laravel menyediakan beberapa driver untuk queue:
- Database (Disimpan dalam tabel database)
- Redis (Performa tinggi, cocok untuk skala besar)
- Amazon SQS (Layanan cloud-based queue)
- Beanstalkd (Queue message broker)
Instalasi dan Konfigurasi Queue
Aktifkan queue driver dalam file .env
:
QUEUE_CONNECTION=database
Lalu buat tabel queue dengan perintah:
php artisan queue:table
php artisan migrate
Membuat Queue Job di Laravel
Membuat Job Baru
Gunakan perintah berikut untuk membuat job:
php artisan make:job SendEmailJob
Lalu, edit file app/Jobs/SendEmailJob.php
untuk mendefinisikan tugas yang akan dijalankan.
Menjalankan Queue Job
Panggil job dalam controller atau service:
use App\Jobs\SendEmailJob;
dispatch(new SendEmailJob($user));
Menjadwalkan Job dengan Delay
Jika ingin menunda eksekusi job, gunakan metode delay()
:
dispatch(new SendEmailJob($user))->delay(now()->addMinutes(5));
Queue Worker dan Manajemen Queue
Menjalankan Queue Worker
Gunakan perintah berikut untuk menjalankan queue worker:
php artisan queue:work
Atau jalankan worker dalam mode daemon:
php artisan queue:listen
Supervising Queue dengan Supervisor
Untuk menjalankan queue secara otomatis, gunakan Supervisor di Linux:
- Instal Supervisor:
sudo apt install supervisor
- Tambahkan konfigurasi di
/etc/supervisor/conf.d/laravel-worker.conf
:[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /path-to-project/artisan queue:work --tries=3 autostart=true autorestart=true user=www-data numprocs=8 redirect_stderr=true stdout_logfile=/path-to-project/storage/logs/worker.log
- Restart Supervisor:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*
Menangani Job yang Gagal (Failed Jobs)
Untuk menyimpan job yang gagal, jalankan:
php artisan queue:failed-table
php artisan migrate
Untuk melihat job yang gagal:
php artisan queue:failed
Untuk mencoba kembali job yang gagal:
php artisan queue:retry all
Optimasi dan Best Practices dalam Penggunaan Queue
Optimasi Performa Queue
- Gunakan Redis sebagai queue driver untuk kecepatan tinggi.
- Jalankan worker dalam mode daemon untuk efisiensi.
Monitoring Queue Job
Gunakan Laravel Horizon untuk memantau queue job:
composer require laravel/horizon
php artisan horizon:install
Lalu jalankan:
php artisan horizon
Best Practices dalam Implementasi Queue
- Batasi jumlah retry pada job agar tidak overload.
- Simpan log untuk debugging jika terjadi error.
- Gunakan Supervisor untuk memastikan queue berjalan terus-menerus.
Kesimpulan
Queue di Laravel adalah solusi efektif untuk menangani tugas berat di latar belakang. Dengan menggunakan queue, aplikasi dapat berjalan lebih responsif dan efisien.
7. FAQ
1. Apa itu Laravel Queue?
Queue adalah sistem antrian yang digunakan untuk mengeksekusi tugas di latar belakang tanpa menghambat request utama.
2. Bagaimana cara melihat job yang sedang berjalan?
Gunakan perintah:
php artisan queue:work --queue=default
3. Apa perbedaan queue:work
dan queue:listen
?
queue:work
menjalankan worker sekali lalu berhenti.queue:listen
mendengarkan queue secara terus-menerus.
4. Apa solusi jika job terus gagal?
Periksa log dengan:
tail -f storage/logs/laravel.log
5. Apa peran Supervisor dalam Laravel Queue?
Supervisor memastikan queue worker tetap berjalan bahkan setelah server restart.
Itulah panduan lengkap mengenai Queue & Job di Laravel. Semoga membantu! 🚀
Posting Komentar