skillup

技術ブログ

PHP

Queueの登録と実際の処理に関して

投稿日:2018年7月21日 更新日:

実務でQueueに絡んだ処理をする機会があったのでメモ。

Queueとは

倉庫管理システムを作ってた時によく出たネタですが、時間がかかる処理があったとして、その処理は同期的に処理するのではなく、ストックしておき、あとで処理(あるいはajaxのように単純に非同期)したいなんてケースがあります。

こういう時に使われるのがQueueという概念です。

キュー(queue)とは?

上の例の方が私のよりわかりやすい・・・(汗)

Queueで大事なこととしては

「キューを記録しておく場所」「処理を登録する場面」「実際の処理を行う場面」の認識でしょうか。

これを理解するのに少し時間が掛かりました・・(汗)

Laravelでこれを実行して見ます。

Laravelでのキュー処理

全体的な処理ですが、下記リンクがわかりやすくこれが最小構成で一番わかりやすいです。このブログも8割以上ここのパクリです(笑)

Laravelの処理をQueueにスタックしてレスポンスのチューニングを行おう

キューを記録しておく場所

Laravelでストック場所として定義しておけるのは下記5つです。

  • sync・・defaultではこれ。同期処理らしく積極的に使う意味はないと思われます。
  • database・・DBに登録。
  • Beanstalk・・調査中(汗)
  • Amazon SQS・・AWSのサービスです。
  • Redis・・KVSのサービスです。

databaseがわかりやすいのでこれで見ておきます。
laravel5.5のキュー投入によるジョブ処理を導入する

下記2つのファイルを設定しておきましょう。

.env

app/queue.php

ちなみにdatabaseの場合、当然テーブルを作る必要があり、下記コマンドで下記のようなテーブルを自動作成しておくことができます。

処理を登録する場面(当然まだ処理は行いません)

次は使われる処理を登録します。

ちなみに一つ一つの処理をJobと呼びます。
LaravelではJobを下記コマンドですぐに作れます。

app/Jobs/TestJob.php

2秒たってログを吐くという簡単な処理を書きます。

そしてこの処理を登録します。

例えばwebであるURL(http://sample.com/queue)にアクセスをしたら登録するとします。

DBを見るとJobが登録されているのがわかります。

これでJobが登録されているのがわかるかと思います。

実際の処理を行う場面

ストックしたジョブを行う場面を見ていきます。

上記コマンドを実行するとDBに登録している処理が実行されます。
コンソールには下記のように処理が図れます。

ログを見ていると意図した文字が吐かれているのと、処理が行われているのがわかるかと思います。DBをみてあげるとJobが削除されているのがわかると思います。

ちなみに私が携わった処理の場合、登録は別処理だったため、結局この処理は使いませんでしたが、大変参考になりましたね・・・

 

 

-PHP
-,

執筆者:


  1. […] Queueの登録と実際の処理に関して […]

  2. […] Queueの登録と実際の処理に関して […]

comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

heroku+cakePHPによるメール送信

herokuに作ったアプリでメール送信機能を実装したのでその時のメモを。 まずメール送信自体はmb_send_mailなどではなく、SendGridというアプリを使います。 使い方ですが、heroku …

no image

正規表現(/を含むとき)

PHPの正規表現ですが、判定する文字列の中にスラッシュが入っている時の処理はデリミタを//ではなく{}でくくればOKです。 例えば数字2桁/数字1桁をチェックしたいとき [crayon-675c54a …

no image

CakePHP3 Unitテスト モデル編

長らくやろうやろうと思っていながら手がつかなかったCakePHP3のユニットテストについて。 以前にも何らかのエントリーで書いたのですが(下記参照)、モデル系はなかなかやらなかったので、これを機に説明 …

no image

wordpressでのnginx設定

ここ1年、apacheではなく、nginxでサービスを作ることが多いため、設定にだいぶ慣れてきました。 今回はwordpressの設定です。 バーチャルホストでsample.comとアクセスをするとw …

no image

Traitによるコードの再利用

PHPでは多重継承が禁じられて(親は1つしかもてない)いるため、共通性のあるコードを書こうと思った時に親にかいていない場合限界があります。 そんな時に使えるのがTraitという考え方で、これを使います …

アーカイブ