Чтобы предотвратить исчезновение задания из очереди SQS после повторных попыток, вы можете попробовать следующие подходы:
1. Увеличьте максимальный лимит получения в SQS:
— По умолчанию SQS имеет ограничение «Максимальное количество приемов», которое определяет максимальное количество раз, которое сообщение может быть получено из очереди, прежде чем оно будет перемещено в очередь недоставленных писем (DLQ).
- Увеличьте ограничение «Максимальное количество приемов» для очереди SQS до более высокого значения, например 10 или 20, чтобы разрешить больше повторных попыток, прежде чем задание будет перемещено в DLQ.
2. Отключить очередь недоставленных писем (DLQ):
- Если вам не нужна функция DLQ, вы можете отключить ее для своей очереди SQS. Это предотвратит перемещение задания в DLQ после максимального количества повторов.
— Чтобы отключить DLQ, вы можете либо создать новую очередь SQS без DLQ, либо изменить конфигурацию существующей очереди, чтобы удалить DLQ.
3. Увеличьте время видимости:
— Тайм-аут видимости в SQS определяет время, в течение которого сообщение будет невидимым для других потребителей после его получения.
- Увеличьте время ожидания видимости до более высокого значения, например 1 часа или 2 часов, чтобы дать заданию больше времени на обработку, прежде чем оно снова станет видимым для следующей повторной попытки.
4. Реализация пользовательской логики повторов:
- Вместо того, чтобы полагаться исключительно на метод retryUntil, вы можете реализовать собственную логику повтора в методе handle вашего задания.
— Это может включать проверку количества попыток и вручную вернуть задание обратно в очередь с настраиваемой задержкой, вместо того, чтобы позволить системе очередей обрабатывать повторные попытки.
5. Используйте собственный драйвер очереди SQS:
- Как упоминалось в предыдущих ответах, вы можете создать собственный драйвер очереди SQS, который расширяет класс SqsQueue по умолчанию и добавляет дополнительные функции для обработки повторных попыток и предотвращения исчезновения заданий.
- Это может дать вам больше контроля над поведением повторных попыток и гарантировать, что задания не будут потеряны или удалены из очереди преждевременно.
Реализовав один или несколько из этих подходов, вы можете предотвратить исчезновение заданий из очереди SQS после повторных попыток и гарантировать, что они будут успешно обработаны или перемещены в DLQ, как и ожидалось.
Цитаты:[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-минуты-if-failed
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue