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の登録と実際の処理に関して […]

SQSのキュー登録とworkコマンドに関して – skillup へ返信する コメントをキャンセル

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

関連記事

no image

コード静的解析ツールを使った際の気づきなど

最近のプロジェクトでコード静的解析ツール(phpcs,phpmd)を使った際の気づきなど コードを書きながら常時エディタがチェックするタイプのものでないとまず無理(保存するたびでも無理だし、コミット時 …

no image

eagar loading vs lazy loading

以前DBからのデータ取得問題でディフォルトだとlazy loadingが発生し、俗にいうN+1問題が発生するので、eagar loadingにすべきみたいな記事を書きました。 joinとeager l …

no image

phpQueryを使ったスクレイピングに関して

以前、スクレイピングに関してはこのエントリーでも紹介したとおり、phpに標準で入っているDOMDocumentを使う方法が一番楽です。 ところがデータによってはXMLで解析するため目的とする要素を取得 …

no image

cakePHP3インストール

PHP7に上がりましたが、それ以前にcakeがversion3になっていますね。 いずれはこれでリプレイスをしなくてはいけないので、今日とりあえずインストールしてみました。 原則としてcomposer …

no image

PHPのPDFライブラリに関して。

今月PHPでPDFを出力する要件があったんで色々見てきましたので、まとめを。 昨年もちょっとやりましたが、色々と面倒です。 fpdfはかなり古くダメダメっぽいですね。昨年はじめにPDFを使う要件があっ …

アーカイブ