For at forhindre et job i at forsvinde fra SQS-køen efter genforsøg, kan du prøve følgende fremgangsmåder:
1. Forøg den maksimale modtagergrænse i SQS:
- Som standard har SQS en "Maximum Receives"-grænse, som bestemmer det maksimale antal gange, en besked kan modtages fra køen, før den flyttes til Dead-Letter Queue (DLQ).
- Forøg grænsen for "Maximum Receives" for din SQS-kø til en højere værdi, såsom 10 eller 20, for at tillade flere genforsøg, før jobbet flyttes til DLQ.
2. Deaktiver Dead-Letter Queue (DLQ):
- Hvis du ikke har brug for DLQ-funktionaliteten, kan du deaktivere den for din SQS-kø. Dette forhindrer jobbet i at blive flyttet til DLQ'en efter det maksimale antal genforsøg.
- For at deaktivere DLQ'en kan du enten oprette en ny SQS-kø uden en DLQ eller ændre den eksisterende køs konfiguration for at fjerne DLQ'en.
3. Forøg synlighedstimeout:
- Visibility Timeout i SQS bestemmer, hvor lang tid en besked er usynlig for andre forbrugere, efter at den er blevet modtaget.
- Øg synlighedstimeoutet til en højere værdi, f.eks. 1 time eller 2 timer, for at give jobbet mere tid til at blive behandlet, før det bliver synligt igen for endnu et forsøg.
4. Implementer tilpasset genforsøgslogik:
- I stedet for udelukkende at stole på `retryUntil`-metoden, kan du implementere tilpasset genforsøgslogik i dit jobs `handle`-metode.
- Dette kan involvere kontrol af antallet af forsøg og manuelt frigive jobbet tilbage til køen med en tilpasset forsinkelse, i stedet for at lade køsystemet håndtere genforsøgene.
5. Brug en brugerdefineret SQS-kødriver:
- Som nævnt i de tidligere svar, kan du oprette en brugerdefineret SQS-kødriver, der udvider standard `SqsQueue`-klassen og tilføjer yderligere funktionalitet til at håndtere genforsøg og forhindre job i at forsvinde.
- Dette kan give dig mere kontrol over genforsøgsadfærden og sikre, at job ikke går tabt eller fjernes fra køen for tidligt.
Ved at implementere en eller flere af disse tilgange kan du forhindre dine job i at forsvinde fra SQS-køen efter genforsøg og sikre, at de behandles med succes eller flyttes til DLQ'en som forventet.
Citater:[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