재시도 후 SQS 대기열에서 작업이 사라지는 것을 방지하려면 다음 접근 방식을 시도할 수 있습니다.
1. SQS의 최대 수신 제한을 늘립니다:
- 기본적으로 SQS에는 메시지가 DLQ(배달 못한 편지 대기열)로 이동되기 전에 대기열에서 메시지를 받을 수 있는 최대 횟수를 결정하는 "최대 수신" 제한이 있습니다.
- 작업이 DLQ로 이동하기 전에 더 많은 재시도를 허용하려면 SQS 대기열의 "최대 수신" 제한을 더 높은 값(예: 10 또는 20)으로 늘립니다.
2. DLQ(배달 못한 편지 대기열)를 비활성화합니다:
- DLQ 기능이 필요하지 않은 경우 SQS 대기열에 대해 비활성화할 수 있습니다. 이렇게 하면 최대 재시도 횟수 이후에 작업이 DLQ로 이동되지 않습니다.
- DLQ를 비활성화하려면 DLQ 없이 새 SQS 대기열을 생성하거나 기존 대기열의 구성을 수정하여 DLQ를 제거할 수 있습니다.
3. 가시성 시간 제한을 늘립니다:
- SQS의 가시성 제한 시간은 메시지가 수신된 후 다른 소비자에게 메시지가 보이지 않는 시간을 결정합니다.
- 표시 시간 제한을 더 높은 값(예: 1시간 또는 2시간)으로 늘리면 작업이 다시 시도되기 전에 처리되는 데 더 많은 시간을 제공합니다.
4. 사용자 정의 재시도 논리 구현:
- `retryUntil` 메소드에만 의존하는 대신 작업의 `handle` 메소드에 사용자 정의 재시도 로직을 구현할 수 있습니다.
- 여기에는 대기열 시스템이 재시도를 처리하도록 하는 대신 시도 횟수를 확인하고 사용자 지정 지연을 사용하여 작업을 다시 대기열로 수동으로 해제하는 작업이 포함될 수 있습니다.
5. 사용자 정의 SQS 대기열 드라이버 사용:
- 이전 응답에서 언급했듯이 기본 `SqsQueue` 클래스를 확장하고 재시도를 처리하고 작업이 사라지는 것을 방지하는 추가 기능을 추가하는 사용자 정의 SQS 대기열 드라이버를 생성할 수 있습니다.
- 이를 통해 재시도 동작을 더 효과적으로 제어할 수 있으며 작업이 조기에 대기열에서 손실되거나 제거되지 않도록 할 수 있습니다.
이러한 접근 방식 중 하나 이상을 구현하면 재시도 후 작업이 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- Minutes-if-failed
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue