Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Comment puis-je empêcher une tâche de disparaître de la file d'attente SQS après de nouvelles tentatives


Comment puis-je empêcher une tâche de disparaître de la file d'attente SQS après de nouvelles tentatives


Pour éviter qu'une tâche ne disparaisse de la file d'attente SQS après de nouvelles tentatives, vous pouvez essayer les approches suivantes :

1. Augmentez la limite maximale de réceptions dans SQS :
- Par défaut, SQS a une limite « Maximum de réceptions », qui détermine le nombre maximum de fois qu'un message peut être reçu de la file d'attente avant d'être déplacé vers la file d'attente des lettres mortes (DLQ).
- Augmentez la limite « Maximum de réceptions » pour votre file d'attente SQS à une valeur plus élevée, telle que 10 ou 20, pour permettre davantage de tentatives avant que le travail ne soit déplacé vers le DLQ.

2. Désactivez la file d'attente des lettres mortes (DLQ) :
- Si vous n'avez pas besoin de la fonctionnalité DLQ, vous pouvez la désactiver pour votre file d'attente SQS. Cela empêchera le travail d'être déplacé vers le DLQ après le nombre maximum de tentatives.
- Pour désactiver le DLQ, vous pouvez soit créer une nouvelle file d'attente SQS sans DLQ, soit modifier la configuration de la file d'attente existante pour supprimer le DLQ.

3. Augmentez le délai d'expiration de la visibilité :
- Le délai d'expiration de visibilité dans SQS détermine la durée pendant laquelle un message est invisible pour les autres consommateurs après sa réception.
- Augmentez le délai de visibilité à une valeur plus élevée, par exemple 1 heure ou 2 heures, pour donner au travail plus de temps pour être traité avant qu'il ne redevienne visible pour une autre tentative.

4. Mettre en œuvre une logique de nouvelle tentative personnalisée :
- Au lieu de vous fier uniquement à la méthode `retryUntil`, vous pouvez implémenter une logique de nouvelle tentative personnalisée dans la méthode `handle` de votre travail.
- Cela peut impliquer de vérifier le nombre de tentatives et de remettre manuellement le travail dans la file d'attente avec un délai personnalisé, plutôt que de laisser le système de file d'attente gérer les tentatives.

5. Utilisez un pilote de file d'attente SQS personnalisé :
- Comme mentionné dans les réponses précédentes, vous pouvez créer un pilote de file d'attente SQS personnalisé qui étend la classe « SqsQueue » par défaut et ajoute des fonctionnalités supplémentaires pour gérer les nouvelles tentatives et empêcher la disparition des tâches.
- Cela peut vous donner plus de contrôle sur le comportement des nouvelles tentatives et garantir que les tâches ne sont pas perdues ou supprimées prématurément de la file d'attente.

En implémentant une ou plusieurs de ces approches, vous pouvez empêcher vos tâches de disparaître de la file d'attente SQS après de nouvelles tentatives et garantir qu'elles sont traitées avec succès ou déplacées vers le DLQ comme prévu.

Citations :
[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