Laravel의 `retryUntil` 메서드는 다음과 같은 방식으로 AWS SQS와 상호 작용합니다.
1. 재시도 기한 지정: 작업 클래스에서 `retryUntil` 메소드를 정의하면 작업 재시도를 중지해야 하는 기한을 지정하게 됩니다. 이 기한은 작업이 디스패치될 때 "VisibilityTimeout" 매개변수로 SQS 대기열에 전달됩니다.
2. 재시도 처리: 작업이 실패하면 SQS는 지정된 "VisibilityTimeout" 기간 동안 메시지를 보이지 않게 만들어 Laravel 대기열 작업자가 작업 처리를 다시 시도할 수 있도록 합니다. "VisibilityTimeout" 기간 내에 작업이 다시 실패하면 SQS는 계속해서 메시지를 보이지 않게 만들어 추가 재시도를 허용합니다.
3. 재시도 기한에 도달: 'VisibilityTimeout' 기간(`retryUntil` 메소드로 지정됨)이 경과되면 SQS는 메시지를 다시 표시하고 Laravel 대기열 작업자는 더 이상 처리를 시도하지 않습니다. 직업. 이 시점에서 작업은 "실패"한 것으로 간주되며 그에 따라 처리될 수 있습니다(예: 배달 못한 편지 대기열로 이동).
4. SQS 구성과의 상호 작용: 'retryUntil' 메서드의 동작은 "MessageRetentionPeriod" 및 "VisibilityTimeout" 설정과 같은 SQS 대기열 구성의 영향을 받을 수 있다는 점에 유의하는 것이 중요합니다. 이러한 SQS 수준 구성은 Laravel의 'retryUntil' 메서드를 재정의하거나 상호 작용할 수 있습니다.
예를 들어 SQS "VisibilityTimeout"이 `retryUntil` 기한보다 낮은 값으로 설정된 경우 작업이 예상보다 더 많이 재시도될 수 있습니다. 반대로, "MessageRetentionPeriod"가 `retryUntil` 기한보다 낮은 값으로 설정된 경우 재시도 기한에 도달하기 전에 작업이 대기열에서 제거될 수 있습니다.
'retryUntil' 메서드가 예상대로 작동하도록 하려면 이러한 설정 간의 상호 작용을 고려하여 Laravel 작업 구성을 SQS 대기열 구성에 맞추는 것이 중요합니다.
요약하면 Laravel의 `retryUntil` 메서드는 작업의 재시도 동작을 제어하는 "VisibilityTimeout" 매개변수를 설정하여 AWS SQS와 상호 작용합니다. 그러나 전반적인 동작은 SQS 대기열 구성의 영향도 받으므로 이러한 설정이 올바르게 정렬되었는지 확인하는 것이 중요합니다.
인용:[1] https://stackoverflow.com/questions/71411471/laravel-retryuntil-job-exits-after-4th-retry-without-failing
[2] https://www.honeybadger.io/blog/laravel-queues-deep-dive/
[3] https://ahmedshamim.com/posts/retry-mechanisms-in-laravel
[4] https://devinthewild.com/article/add-delay-job-retries-laravel
[5] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x- Minutes-if-failed