For å forhindre at en jobb forsvinner fra SQS-køen etter nye forsøk, kan du prøve følgende tilnærminger:
1. Øk den maksimale mottaksgrensen i SQS:
- Som standard har SQS en "Maksimal mottak"-grense, som bestemmer det maksimale antallet ganger en melding kan mottas fra køen før den flyttes til Dead-Letter Queue (DLQ).
- Øk grensen for "Maksimum mottak" for SQS-køen til en høyere verdi, for eksempel 10 eller 20, for å tillate flere forsøk før jobben flyttes til DLQ.
2. Deaktiver Dead-Letter Queue (DLQ):
- Hvis du ikke trenger DLQ-funksjonaliteten, kan du deaktivere den for SQS-køen din. Dette vil forhindre at jobben flyttes til DLQ etter maksimalt antall forsøk.
- For å deaktivere DLQ, kan du enten opprette en ny SQS-kø uten en DLQ eller endre den eksisterende køens konfigurasjon for å fjerne DLQ.
3. Øk tidsavbruddet for synlighet:
- Tidsavbrudd for synlighet i SQS bestemmer hvor lang tid en melding er usynlig for andre forbrukere etter at den er mottatt.
- Øk tidsavbruddet for synlighet til en høyere verdi, for eksempel 1 time eller 2 timer, for å gi jobben mer tid til å behandles før den blir synlig igjen for et nytt forsøk.
4. Implementer tilpasset forsøkslogikk:
- I stedet for å stole utelukkende på `retryUntil`-metoden, kan du implementere egendefinert gjenforsøkslogikk i jobbens `handle`-metode.
– Dette kan innebære å sjekke antall forsøk og manuelt slippe jobben tilbake til køen med en tilpasset forsinkelse, i stedet for å la køsystemet håndtere forsøkene på nytt.
5. Bruk en egendefinert SQS-kødriver:
- Som nevnt i de forrige svarene, kan du lage en egendefinert SQS-kødriver som utvider standard `SqsQueue`-klassen og legger til ekstra funksjonalitet for å håndtere gjenforsøk og forhindre at jobber forsvinner.
– Dette kan gi deg mer kontroll over prøveoppførselen og sikre at jobber ikke går tapt eller fjernes fra køen for tidlig.
Ved å implementere en eller flere av disse tilnærmingene kan du forhindre at jobbene dine forsvinner fra SQS-køen etter gjenforsøk og sikre at de behandles vellykket eller flyttes til DLQ som forventet.
Sitater:[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