LoginSignup
6
1

More than 3 years have passed since last update.

[Laravel]Jobの遅延ディスパッチはSQSの遅延キューの遅延設定を上書きする

Last updated at Posted at 2020-07-14

はじめに

Amazon SQSには遅延キューというキュー全体に対して遅延時間を設定する機能がありますが、
LaravelにもJobを遅延させて実行する仕組みとして、遅延ディスパッチという機能があります。
両方遅延時間を設定した場合に、
「どちらの遅延時間が優先されるのか」 あるいは「両方合わせた時間遅延するのか」を調べました。

Amazon SQS 遅延キュー

遅延キューを使用すると、キューへの新しいメッセージの配信を数秒間遅延させることができます。たとえば、コンシューマーアプリケーションがメッセージの処理に追加の時間を必要とする場合に遅延キューを使用できます。遅延キューを作成した場合、キューに送信したメッセージはいずれも、遅延期間の間コンシューマーに表示されなくなります。キューのデフォルトの (最小) 遅延は 0 秒です。最大は 15 分です。

キュー全体に対してではなく、各メッセージに遅延の秒数を設定するには、メッセージタイマーを使用して、遅延キューの DelaySeconds 値ではなく、メッセージタイマーの DelaySeconds 値を Amazon SQS で使用できるようにします。

配信キューはキュー全体に対して遅延設定を設定する仕組みのようです。

Amazon SQS メッセージタイマー

メッセージタイマーを使用すると、キューに追加するメッセージの初期非表示期間を指定できます。たとえば、タイマーを 45 秒に設定してメッセージを送信すると、そのメッセージはキューに入ってから 45 秒間はコンシューマーに表示されません。
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-timers.html

配信キューと違い、メッセージタイマーはキューごとに遅延時間を設定できる仕組みのようです。

Laravel 遅延ディスパッチ

キュー投入されたジョブの実行を遅らせたい場合は、ジョブのディスパッチ時にdelayメソッドを使います。

Laravelから個別にキューの遅延時間を指定するにはこの機能を使います。

調査結果

まとめ

  • Larvelから遅延ディスパッチしたときは、遅延時間がメッセージタイマーとして設定される
  • メッセージタイマーは、キュー全体の遅延設定である遅延キューの遅延時間より優先される

以上、参考になりましたら幸いです。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1