Tutorial membuat Queue dan Background Job di Laravel 13. Solusi ampuh mengatasi proses kirim email atau generate laporan yang bikin aplikasi lemot!
Pernahkah kamu mengeklik tombol daftar atau transaksi di sebuah aplikasi web, lalu halaman terasa loading sangat lama hanya untuk menunggu email konfirmasi terkirim?
Di Laravel 13, proses berat yang memakan waktu—seperti pengiriman email, ekstraksi file PDF, pemrosesan gambar, hingga panggilan API eksternal—seharusnya tidak dijalankan secara langsung di alur proses utama (synchronous).
Solusi standar industrinya adalah memindahkan tugas berat tersebut ke latar belakang menggunakan Queue & Background Job.
Memahami Konsep Queue
Secara default, Laravel menjalankan perintah baris demi baris secara berurutan (Synchronous). Pengguna harus menunggu seluruh proses selesai sebelum browser menerima respons.
Dengan Queue (Antrean), proses berat akan dibungkus menjadi sebuah Job dan dimasukkan ke dalam antrean. Server akan langsung memberikan respons "Sukses" kepada pengguna tanpa perlu menunggu proses berat tersebut selesai dieksekusi.
┌─────────────────────────────────────────────────────────────────────────┐
│ ALUR KERJA QUEUE DI LARAVEL │
├────────────────────────────────┬────────────────────────────────────────┤
│ Tanpa Queue (User Menunggu) │ Menggunakan Queue (Background Process) │
├────────────────────────────────┼────────────────────────────────────────┤
│ 1. User klik Register │ 1. User klik Register │
│ 2. Simpan User ke DB │ 2. Simpan User ke DB │
│ 3. Kirim Email (Tunggu 5 detik)│ 3. Dorong tugas email ke Queue │
│ 4. Tampilkan Halaman (5,5s) │ 4. Tampilkan Halaman Instan (0,2s) │
│ │ 5. Worker memproses email di belakang │
└────────────────────────────────┴────────────────────────────────────────┘
1. Konfigurasi Driver Queue
Buka file .env kamu. Secara default, Laravel menggunakan driver sync (langsung dieksekusi tanpa antrean). Ubah driver menjadi database untuk kemudahan di lingkungan pengembang:
Cuplikan kode
QUEUE_CONNECTION=database
Sejak Laravel versi baru, tabel pendukung antrean jobs dan failed_jobs sudah siap digunakan. Cukup jalankan migrasi database:
Bash
php artisan migrate
2. Membuat Job Class
Gunakan perintah Artisan untuk membuat class Job baru:
Bash
php artisan make:job SendWelcomeEmail
Buka file yang baru dibuat di app/Jobs/SendWelcomeEmail.php dan tuliskan logika tugas berat di dalam method handle():
PHP
namespace App\Jobs;
use App\Models\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeMail;
class SendWelcomeEmail implements ShouldQueue
{
use Queueable;
// Menerima data user yang dikirimkan
public function __construct(public User $user) {}
/**
* Logika utama yang akan dieksekusi oleh Worker di latar belakang
*/
public function handle(): void
{
// Simulasi proses pengiriman email berat
Mail::to($this->user->email)->send(new WelcomeMail($this->user));
}
}
3. Mendorong Job ke Antrean (Dispatching)
Buka Controller milikmu (misal RegisterController.php) dan panggil job tersebut menggunakan metode dispatch():
PHP
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Jobs\SendWelcomeEmail;
use Illuminate\Http\Request;
class RegisterController extends Controller
{
public function store(Request $request)
{
// 1. Simpan user ke database
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
// 2. Lempar tugas kirim email ke latar belakang
SendWelcomeEmail::dispatch($user);
// 3. Langsung kembalikan respons cepat ke pengguna!
return redirect()->route('dashboard')->with('success', 'Registrasi berhasil!');
}
}
4. Menjalankan Queue Worker
Karena tugas sudah dimasukkan ke dalam tabel jobs, kamu membutuhkan Queue Worker yang bertugas mengeksekusi antrean tersebut secara terus menerus di latar belakang.
Jalankan perintah ini di terminal kamu:
Bash
php artisan queue:work
Terminal akan menampilkan log setiap kali ada tugas antrean yang berhasil diproses:
Plaintext
[2026-09-09 10:00:00] Processing: App\Jobs\SendWelcomeEmail
[2026-09-09 10:00:02] Processed: App\Jobs\SendWelcomeEmail (2.12s)
Tips Production: Di server production (VPS Linux), gunakan pengelola proses seperti Supervisor untuk memastikan perintah
php artisan queue:workselalu berjalan otomatis dan menyala kembali jika terjadi crash.
Kesimpulan
Penerapan Queue & Background Job di Laravel 13 adalah kuncinya agar aplikasi web kamu tetap responsif dan tidak pernah terkunci (freeze) saat melakukan pemrosesan data berat. Dengan memindahkan beban tugas ke latar belakang, pengalaman pengguna (user experience) akan meningkat drastis.
Ditulis oleh
Egi Samsul Mu'arif
Web & Mobile Developer



