Če želite preprečiti, da bi opravilo izginilo iz čakalne vrste SQS po ponovnih poskusih, lahko poskusite z naslednjimi pristopi:
1. Povečajte največjo omejitev sprejema v SQS:
- SQS ima privzeto omejitev »Maximum Receives«, ki določa, kolikokrat je sporočilo mogoče prejeti iz čakalne vrste, preden se premakne v čakalno vrsto mrtvih pisem (DLQ).
- Povečajte omejitev »Največje število prejemov« za vašo čakalno vrsto SQS na višjo vrednost, na primer 10 ali 20, da omogočite več ponovnih poskusov, preden se opravilo premakne v DLQ.
2. Onemogočite čakalno vrsto mrtvih pisem (DLQ):
- Če ne potrebujete funkcije DLQ, jo lahko onemogočite za svojo čakalno vrsto SQS. To bo preprečilo, da bi se opravilo premaknilo v DLQ po največjem številu ponovnih poskusov.
- Če želite onemogočiti DLQ, lahko ustvarite novo čakalno vrsto SQS brez DLQ ali spremenite konfiguracijo obstoječe čakalne vrste, da odstranite DLQ.
3. Povečajte časovno omejitev vidnosti:
- Časovna omejitev vidnosti v SQS določa, koliko časa je sporočilo nevidno drugim uporabnikom po tem, ko je bilo prejeto.
- Povečajte časovno omejitev vidnosti na višjo vrednost, na primer 1 uro ali 2 uri, da boste opravilu dali več časa za obdelavo, preden bo ponovno vidno za ponovni poskus.
4. Implementirajte logiko ponovnega poskusa po meri:
- Namesto da se zanašate samo na metodo `retryUntil`, lahko implementirate logiko ponovnega poskusa po meri v metodo `handle` vašega opravila.
- To lahko vključuje preverjanje števila poskusov in ročno sprostitev opravila nazaj v čakalno vrsto z zakasnitvijo po meri, namesto da bi prepustili sistemu čakalne vrste, da obravnava ponovne poskuse.
5. Uporabi gonilnik čakalne vrste SQS po meri:
- Kot je bilo omenjeno v prejšnjih odgovorih, lahko ustvarite gonilnik čakalne vrste SQS po meri, ki razširi privzeti razred `SqsQueue` in doda dodatno funkcionalnost za obravnavanje ponovnih poskusov in preprečevanje izginotja opravil.
- To vam lahko da večji nadzor nad ponovnim poskusom in zagotovi, da se opravila ne izgubijo ali odstranijo iz čakalne vrste predčasno.
Z implementacijo enega ali več teh pristopov lahko preprečite, da bi vaša opravila po ponovnih poskusih izginila iz čakalne vrste SQS, in zagotovite, da so uspešno obdelana ali premaknjena v DLQ, kot je pričakovano.
Citati:[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