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-lay-job-retries-laravel
[5] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x- minutes-if-failed