KodeJs
Cara Menggunakan Queue & Background Job di Laravel 13
Laravel3 menit baca

Cara Menggunakan Queue & Background Job di Laravel 13

Kembali ke Blog
Egi Samsul Mu'arifEgi Samsul Mu'arif9 September 20263 menit baca

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:work selalu 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.


Egi Samsul Mu'arif

Ditulis oleh

Egi Samsul Mu'arif

Web & Mobile Developer

Artikel Terkait

Lihat semua