Home Paket Belajar Bootcamp Instruktur

Tutorial Laravel Queue & Jobs #6 - Job Batching & Monitoring dengan Horizon

Belajar cara kerja Laravel Queue & Jobs dari dasar hingga implementasi nyata. Materi mencakup pembuatan job, dispatching, konfigurasi driver queue, worker, delayed jobs, batch jobs, failed jobs, retry mechanism, hingga studi kasus seperti pengiriman email, notifikasi, dan ekspor data. Cocok untuk pemula yang ingin membangun aplikasi Laravel yang lebih cepat dan scalable.

✅ Telah dilihat 36 kali

Rating: 5.00 ⭐

... 12 June 2026, 15:14

Di episode terakhir ini, teman-teman akan kenalan dengan dua fitur yang lebih advanced: Job Batching dan Laravel Horizon.


Job Batching

Job Batching memungkinkan teman-teman mengelompokkan banyak job dan menjalankan callback ketika semuanya selesai. Cocok untuk kasus seperti: proses banyak file sekaligus, kirim bulk notification, atau impor data besar yang dibagi-bagi ke beberapa chunk.

<?php

use App\Jobs\ProcessImportChunk;
use Illuminate\Bus\Batch;
use Illuminate\Support\Facades\Bus;
use Throwable;

// Bagi data jadi beberapa chunk, lalu batch semuanya
$chunks = array_chunk($importData, 200);

$batch = Bus::batch(
    collect($chunks)->map(fn ($chunk) => new ProcessImportChunk($chunk))->all()
)
->then(function (Batch $batch) {
    // Semua job berhasil
    Log::info("Import selesai! Total: {$batch->totalJobs} rows diproses.");
})
->catch(function (Batch $batch, Throwable $e) {
    // Ada setidaknya satu job yang gagal
    Log::error('Ada error saat import: ' . $e->getMessage());
})
->finally(function (Batch $batch) {
    // Selalu dijalankan, berhasil atau gagal
    Log::info('Proses batch selesai.');
})
->dispatch();

// Simpan $batch->id untuk tracking progress dari frontend
return response()->json(['batch_id' => $batch->id]);

Teman-teman bisa polling status batch dari frontend untuk bikin progress bar:

// Route untuk cek progress batch
Route::get('/import/progress/{batchId}', function (string $batchId) {
    $batch = Bus::findBatch($batchId);

    return response()->json([
        'progress'   => $batch->progress(),   // 0–100
        'finished'   => $batch->finished(),
        'failed'     => $batch->failedJobs,
        'total'      => $batch->totalJobs,
        'processed'  => $batch->processedJobs(),
    ]);
});

Sebelum pakai batching, pastikan teman-teman sudah buat tabelnya:

php artisan queue:batches-table
php artisan migrate

Laravel Horizon

Horizon adalah dashboard real-time untuk monitoring semua queue. Teman-teman bisa lihat berapa job yang pending, berapa yang gagal, throughput per menit, dan banyak lagi — semua dalam satu halaman yang bersih.

# Install Horizon (butuh Redis sebagai driver)
composer require laravel/horizon
php artisan horizon:install
php artisan horizon:publish

# Jalankan Horizon (menggantikan queue:work)
php artisan horizon

# Akses dashboard di browser
# http://your-app.com/horizon

Horizon bisa dikonfigurasi di config/horizon.php. Di sana teman-teman bisa atur berapa worker yang jalan per environment dan queue mana yang diprioritaskan:

'environments' => [
    'production' => [
        'supervisor-1' => [
            'maxProcesses' => 10,
            'balanceMaxShift' => 1,
            'balanceCooldown' => 3,
        ],
    ],

    'local' => [
        'supervisor-1' => [
            'maxProcesses' => 3,
        ],
    ],
],

Untuk keamanan, sebaiknya batasi akses Horizon hanya untuk user tertentu. Tambahkan di app/Providers/HorizonServiceProvider.php:

protected function gate(): void
{
    Gate::define('viewHorizon', function ($user) {
        return in_array($user->email, [
            '[email protected]',
        ]);
    });
}

Penutup

Setelah selesai 6 episode ini, teman-teman sudah punya fondasi yang kuat untuk implementasi queue di Laravel. Mulai dari konsep dasar, setup driver, bikin Job class, sampai handle error dan monitoring. Queue adalah salah satu fitur yang paling mengubah cara app berinteraksi dengan user — dari yang terasa lambat dan blocking, jadi cepat dan responsif.

Langkah selanjutnya yang bisa dijelajahi:

  • Laravel Telescope — untuk debugging dan profiling di lokal
  • Queue prioritization — agar job mendesak diproses lebih dulu
  • Unique jobs — mencegah job yang sama masuk dua kali ke queue
  • Rate limiting pada job — mengontrol seberapa sering job tertentu boleh jalan

Selamat mencoba

Daftar eBook