Pengantar Bug Queue Laravel: Data Terduplikasi Saat Retry Job

Ketika job Laravel di-retry karena gagal, data yang diproses sering berakhir ganda jika tidak ada penanganan khusus. Artikel ini langsung menjelaskan penyebab umum duplikasi dalam bug queue Laravel, langkah debugging yang terbukti, serta perbaikan praktis agar retry job tidak membuat data rangkap.

Bug ini biasanya terlihat saat job memodifikasi database atau memanggil API eksternal tanpa mekanisme pencegahan pengulangan; retry otomatis mengeksekusi ulang logika yang sama. Fokus utama adalah memastikan job tetap aman dijalankan berkali-kali.

Gejala dan Observasi Awal

Gejala yang mendorong investigasi adalah:

  • Entitas database muncul lebih dari sekali padahal job hanya harus mem-proses satu kali.
  • Log queue menunjukkan job berhasil namun entri double entry terjadi setelah retry manual atau otomatis.
  • Job table (jika menggunakan database queue) memperlihatkan job dengan status failed lalu di-retry, tetapi tidak ada mekanisme pembersihan state sebelumnya.

Catat waktu percobaan retry. Bila duplikat muncul hanya setelah pengiriman ulang, ini menunjukkan retry job memengaruhi state bisnis alih-alih hanya melakukan aksi idempotent.

Investigasi Log dan Queue

Langkah debugging yang paling cepat adalah menelusuri log storage/logs/laravel.log dan memperhatikan pola berikut:

[2024-07-21 15:30:02] local.INFO: Processing job: App\Jobs\SyncOrderToErp via queue:default {