Bir işin yeniden denemelerden sonra SQS kuyruğundan kaybolmasını önlemek için aşağıdaki yaklaşımları deneyebilirsiniz:
1. SQS'de Maksimum Alma Sınırını Artırın:
- Varsayılan olarak, SQS'nin bir "Maksimum Alma" sınırı vardır; bu, bir mesajın Atılacak Mektup Kuyruğuna (DLQ) taşınmadan önce kuyruktan maksimum kaç kez alınabileceğini belirler.
- İş DLQ'ya taşınmadan önce daha fazla yeniden denemeye izin vermek için SQS kuyruğunuz için "Maksimum Alma" sınırını 10 veya 20 gibi daha yüksek bir değere yükseltin.
2. Geçmeyen Mektup Sırasını (DLQ) devre dışı bırakın:
- DLQ işlevselliğine ihtiyacınız yoksa SQS sıranız için bunu devre dışı bırakabilirsiniz. Bu, maksimum yeniden deneme sayısından sonra işin DLQ'ya taşınmasını önleyecektir.
- DLQ'yu devre dışı bırakmak için, DLQ olmadan yeni bir SQS kuyruğu oluşturabilir veya DLQ'yu kaldırmak için mevcut kuyruğun yapılandırmasını değiştirebilirsiniz.
3. Görünürlük Zaman Aşımını Artırın:
- SQS'deki Görünürlük Zaman Aşımı, bir mesajın alındıktan sonra diğer tüketiciler tarafından görülemeyeceği süreyi belirler.
- İşe başka bir yeniden deneme için tekrar görünür hale gelmeden önce işlenmesi için daha fazla zaman tanımak amacıyla Görünürlük Zaman Aşımını 1 saat veya 2 saat gibi daha yüksek bir değere artırın.
4. Özel Yeniden Deneme Mantığını uygulayın:
- Yalnızca "retryUntil" yöntemine güvenmek yerine, işinizin "handle" yönteminde özel yeniden deneme mantığını uygulayabilirsiniz.
- Bu, kuyruk sisteminin yeniden denemeleri yapmasına izin vermek yerine, deneme sayısının kontrol edilmesini ve işi özel bir gecikmeyle manuel olarak kuyruğa geri bırakmayı içerebilir.
5. Özel bir SQS Kuyruk Sürücüsü kullanın:
- Önceki yanıtlarda belirtildiği gibi, varsayılan "SqsQueue" sınıfını genişleten ve yeniden denemeleri işlemek ve işlerin kaybolmasını önlemek için ek işlevler ekleyen özel bir SQS kuyruk sürücüsü oluşturabilirsiniz.
- Bu size yeniden deneme davranışı üzerinde daha fazla kontrol verebilir ve işlerin kaybolmamasını veya kuyruktan vaktinden önce kaldırılmamasını sağlayabilir.
Bu yaklaşımlardan bir veya birkaçını uygulayarak, işlerinizin yeniden denemelerden sonra SQS kuyruğundan kaybolmasını önleyebilir ve başarılı bir şekilde işlenmesini veya beklendiği gibi DLQ'ya taşınmasını sağlayabilirsiniz.
Alıntılar:[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-minutes-if-failed
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue