Ruang penulis
← Kembali ke jurnal
Laravel

Memindahkan Pekerjaan Latar Belakang Laravel ke Queue

Pisahkan pekerjaan tambahan dari respons HTTP dengan job, worker, dan pengiriman setelah transaksi selesai.

DAdministrator · 21 Sep 2026 · 2 menit baca

Permintaan HTTP sebaiknya tidak harus menunggu pekerjaan tambahan yang panjang. Queue memungkinkan aplikasi menyerahkan pekerjaan kepada worker. Keuntungan ini baru terasa ketika koneksi queue bukan sync dan worker benar-benar berjalan.

Sebagai latihan, buat LogArticleSummary dengan php artisan make:job LogArticleSummary. Contoh hanya menulis ringkasan ke log agar alur mudah diperiksa. Pada aplikasi nyata, pola serupa dapat dipakai untuk pemrosesan laporan; jangan menganggap contoh logging ini membutuhkan queue demi performa.

Contoh implementasi

namespace App\Jobs;

use App\Models\Post;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\Log;

class LogArticleSummary implements ShouldQueue
{
    use Queueable;

    public int $tries = 3;

    public function __construct(public int $postId) {}

    public function handle(): void
    {
        $post = Post::find($this->postId);
        if (! $post) {
            return;
        }
        Log::info('Article summary prepared', ['post_id' => $post->id]);
    }
}
// After saving $post inside your application:
\App\Jobs\LogArticleSummary::dispatch($post->id)->afterCommit();
# With a configured non-sync queue and its required tables/service:
php artisan queue:work --tries=3

Cara memeriksa

Hentikan worker, kirim satu job, lalu jalankan worker untuk melihat log diproses. Jangan memakai queue produksi untuk latihan. afterCommit() mencegah job dikirim sebelum transaksi penyimpanan selesai.

Sebuah job dapat dicoba ulang. Logging ulang pada contoh tidak berbahaya, tetapi pengiriman email, pembayaran, atau pembuatan file memerlukan penanganan duplikasi yang sesuai. Pada produksi, kelola worker dengan process manager dan jalankan queue:restart setelah deployment agar worker memuat kode baru.

Referensi

Dokumentasi resmi

← Jelajahi catatan lainnya