För att förhindra att ett jobb försvinner från SQS-kön efter nya försök, kan du prova följande tillvägagångssätt:
1. Öka den maximala mottagargränsen i SQS:
- Som standard har SQS en "Maximum Receives"-gräns, som bestämmer det maximala antalet gånger ett meddelande kan tas emot från kön innan det flyttas till Dead-Letter Queue (DLQ).
- Öka gränsen för "Maximum mottagna" för din SQS-kö till ett högre värde, till exempel 10 eller 20, för att tillåta fler försök innan jobbet flyttas till DLQ.
2. Inaktivera dödbokstavskön (DLQ):
- Om du inte behöver DLQ-funktionaliteten kan du inaktivera den för din SQS-kö. Detta kommer att förhindra att jobbet flyttas till DLQ efter det maximala antalet återförsök.
- För att inaktivera DLQ kan du antingen skapa en ny SQS-kö utan DLQ eller ändra den befintliga köns konfiguration för att ta bort DLQ.
3. Öka tidsgränsen för synlighet:
- Tidsgränsen för synlighet i SQS bestämmer hur lång tid ett meddelande är osynligt för andra konsumenter efter att det har tagits emot.
- Öka tidsgränsen för synlighet till ett högre värde, till exempel 1 timme eller 2 timmar, för att ge jobbet mer tid att bearbeta innan det blir synligt igen för ett nytt försök.
4. Implementera anpassad logik för återförsök:
- Istället för att enbart förlita dig på metoden `retryUntil`, kan du implementera anpassad logik för att försöka igen i ditt jobbs `handle`-metod.
– Det kan innebära att kontrollera antalet försök och manuellt släppa tillbaka jobbet till kön med en anpassad fördröjning, snarare än att låta kösystemet hantera omförsöken.
5. Använd en anpassad SQS-ködrivrutin:
- Som nämnts i de tidigare svaren kan du skapa en anpassad SQS-ködrivrutin som utökar standardklassen `SqsQueue` och lägger till ytterligare funktionalitet för att hantera omförsök och förhindra att jobb försvinner.
– Detta kan ge dig mer kontroll över beteendet för att försöka igen och säkerställa att jobb inte går förlorade eller tas bort från kön i förtid.
Genom att implementera en eller flera av dessa tillvägagångssätt kan du förhindra att dina jobb försvinner från SQS-kön efter omförsök och säkerställa att de bearbetas framgångsrikt eller flyttas till DLQ som förväntat.
Citat:[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