Chcete-li zabránit zmizení úlohy z fronty SQS po opakování pokusů, můžete vyzkoušet následující přístupy:
1. Zvyšte maximální limit příjmu v SQS:
- Ve výchozím nastavení má SQS limit „Maximální počet přijatých zpráv“, který určuje, kolikrát může být zpráva přijata z fronty, než bude přesunuta do fronty nedoručených zpráv (DLQ).
- Zvyšte limit "Maximální příjem" pro vaši frontu SQS na vyšší hodnotu, například 10 nebo 20, abyste umožnili více opakování před přesunem úlohy do DLQ.
2. Zakažte frontu nedoručených zpráv (DLQ):
- Pokud funkci DLQ nepotřebujete, můžete ji pro svou frontu SQS zakázat. To zabrání přesunutí úlohy do DLQ po maximálním počtu opakování.
- Chcete-li zakázat DLQ, můžete buď vytvořit novou frontu SQS bez DLQ, nebo upravit konfiguraci stávající fronty a odstranit DLQ.
3. Zvyšte časový limit viditelnosti:
- Časový limit viditelnosti v SQS určuje dobu, po kterou je zpráva neviditelná pro ostatní zákazníky poté, co byla přijata.
- Zvyšte Časový limit viditelnosti na vyšší hodnotu, například 1 hodinu nebo 2 hodiny, abyste poskytli úkolu více času na zpracování, než bude znovu viditelný pro další pokus.
4. Implementujte vlastní logiku opakování:
- Namísto spoléhání se pouze na metodu `retryUntil`, můžete implementovat vlastní logiku opakování v metodě `handle` vaší úlohy.
- To může zahrnovat kontrolu počtu pokusů a ruční uvolnění úlohy zpět do fronty s vlastním zpožděním, spíše než nechat systém fronty zpracovávat opakování.
5. Použijte vlastní ovladač fronty SQS:
- Jak bylo zmíněno v předchozích odpovědích, můžete vytvořit vlastní ovladač fronty SQS, který rozšíří výchozí třídu `SqsQueue` a přidá další funkce pro zpracování opakování a zabránění mizení úloh.
- To vám může poskytnout větší kontrolu nad chováním opakování a zajistit, že úlohy nebudou ztraceny nebo předčasně odstraněny z fronty.
Implementací jednoho nebo více z těchto přístupů můžete zabránit tomu, aby vaše úlohy zmizely z fronty SQS po opakovaných pokusech, a zajistit, aby byly úspěšně zpracovány nebo přesunuty do DLQ podle očekávání.
Citace:[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