Ha meg szeretné akadályozni, hogy egy job újrapróbálkozás után eltűnjön az SQS-sorból, próbálkozzon a következő módszerekkel:
1. Növelje meg az SQS maximális vételi korlátját:
- Alapértelmezés szerint az SQS-nek van egy "Maximális vételi" korlátja, amely meghatározza, hogy egy üzenet legfeljebb hányszor fogadható a sorból, mielőtt az átkerülne a holt betűs sorba (DLQ).
- Növelje az SQS-sor "Maximális fogadások" korlátját magasabb értékre, például 10-re vagy 20-ra, hogy több újrapróbálkozást tegyen lehetővé, mielőtt a job átkerülne a DLQ-ba.
2. A holtbetűs sor (DLQ) letiltása:
- Ha nincs szüksége a DLQ funkcióra, letilthatja azt az SQS-várólista számára. Ez megakadályozza, hogy a job a maximális számú újrapróbálkozás után átkerüljön a DLQ-ba.
- A DLQ letiltásához vagy létrehozhat egy új SQS-sort DLQ nélkül, vagy módosíthatja a meglévő sor konfigurációját a DLQ eltávolításához.
3. Növelje a láthatósági időt:
- Az SQS láthatósági időtúllépése határozza meg, hogy egy üzenet mennyi ideig láthatatlan a többi fogyasztó számára, miután megérkezett.
- Növelje a láthatóság időtúllépését magasabb értékre, például 1 órára vagy 2 órára, hogy több idő legyen a munkának a feldolgozásra, mielőtt ismét láthatóvá válna egy újabb próbálkozásra.
4. Az egyéni újrapróbálkozási logika megvalósítása:
- Ahelyett, hogy kizárólag a `retryUntil` metódusra hagyatkozna, egyéni újrapróbálkozási logikát alkalmazhat a feladat `handle` metódusában.
- Ez magában foglalhatja a próbálkozások számának ellenőrzését, és a feladat manuális visszaengedését a sorba egyéni késleltetéssel, ahelyett, hogy a sorrendszer kezelje az újrapróbálkozásokat.
5. Egyéni SQS Queue Driver használata:
- Amint azt az előző válaszokban említettük, létrehozhat egy egyéni SQS-sorillesztőt, amely kiterjeszti az alapértelmezett "SqsQueue" osztályt, és további funkciókat ad hozzá az újrapróbálkozások kezeléséhez és a feladatok eltűnésének megakadályozásához.
- Ez nagyobb irányítást biztosíthat az újrapróbálkozási viselkedés felett, és biztosíthatja, hogy a jobok ne vesszenek el vagy ne kerüljenek ki a sorból idő előtt.
Ezen megközelítések közül egy vagy több megvalósításával megakadályozhatja, hogy a jobok újrapróbálkozás után eltűnjenek az SQS-sorból, és biztosíthatja, hogy a feldolgozásuk sikeresen megtörténjen, vagy a várt módon átkerüljenek a DLQ-ba.
Idézetek:[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