Untuk mencegah tugas hilang dari antrean SQS setelah percobaan ulang, Anda dapat mencoba pendekatan berikut:
1. Meningkatkan Batas Maksimum Penerimaan di SQS:
- Secara default, SQS memiliki batas "Penerimaan Maksimum", yang menentukan berapa kali pesan dapat diterima dari antrean sebelum dipindahkan ke Antrean Surat Mati (DLQ).
- Tingkatkan batas "Penerimaan Maksimum" untuk antrean SQS Anda ke nilai yang lebih tinggi, misalnya 10 atau 20, untuk memungkinkan lebih banyak percobaan ulang sebelum pekerjaan dipindahkan ke DLQ.
2. Menonaktifkan Antrean Surat Mati (DLQ):
- Jika Anda tidak memerlukan fungsionalitas DLQ, Anda dapat menonaktifkannya untuk antrian SQS Anda. Hal ini akan mencegah pekerjaan dipindahkan ke DLQ setelah jumlah percobaan ulang maksimum.
- Untuk menonaktifkan DLQ, Anda dapat membuat antrean SQS baru tanpa DLQ atau mengubah konfigurasi antrean yang ada untuk menghapus DLQ.
3. Meningkatkan Batas Waktu Visibilitas:
- Batas Waktu Visibilitas di SQS menentukan lamanya suatu pesan tidak terlihat oleh konsumen lain setelah pesan diterima.
- Tingkatkan Batas Waktu Visibilitas ke nilai yang lebih tinggi, misalnya 1 jam atau 2 jam, agar tugas memiliki lebih banyak waktu untuk diproses sebelum tugas tersebut terlihat lagi untuk percobaan ulang lainnya.
4. Menerapkan Logika Coba Ulang Kustom:
- Daripada hanya mengandalkan metode `retryUntil`, Anda dapat menerapkan logika coba ulang khusus dalam metode `handle` pekerjaan Anda.
- Hal ini dapat melibatkan pemeriksaan jumlah percobaan dan melepaskan pekerjaan kembali ke antrean secara manual dengan penundaan khusus, daripada membiarkan sistem antrean menangani percobaan ulang.
5. Gunakan Driver Antrean SQS Khusus:
- Seperti disebutkan dalam tanggapan sebelumnya, Anda dapat membuat driver antrean SQS khusus yang memperluas kelas `SqsQueue` default dan menambahkan fungsionalitas tambahan untuk menangani percobaan ulang dan mencegah hilangnya pekerjaan.
- Hal ini dapat memberi Anda kontrol lebih besar atas perilaku percobaan ulang dan memastikan bahwa pekerjaan tidak hilang atau dihapus dari antrean sebelum waktunya.
Dengan menerapkan satu atau lebih pendekatan ini, Anda dapat mencegah pekerjaan Anda hilang dari antrean SQS setelah percobaan ulang dan memastikan bahwa pekerjaan tersebut berhasil diproses atau dipindahkan ke DLQ seperti yang diharapkan.
Kutipan:[1] https://dev.to/ichtrojan/configuring-laravel-queues-with-aws-sqs-3f0n
[2] https://www.honeybadger.io/blog/laravel-queues-deep-dive/
[3] https://stackoverflow.com/questions/71411471/laravel-retryuntil-job-exits-after-4th-retry-without-failing
[4] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x-menit-jika-gagal
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue