LoginSignup
10
8

More than 3 years have passed since last update.

laravel でキューを使う(database経由)

Posted at

キューはメール一斉送信やPDF帳票生成などの時間がかかる処理を
バックエンドで処理する仕組み

キューをDBテーブル経由で捌く

Laravel 6.x キュー
大まかな流れ
controllerから非同期処理テーブル(jobs)に処理内容を追加(dispatch)する
キューワーカーを実行し、レコードがあれば実行する
手動で上記コマンドを打つのは現実的ではないのでsupervisorなどのプロセスモニタを利用する

config設定

.envかconfig/queue.phpでQUEUE_CONNECTIONをdatabaseにする

jobsテーブルを作成

$ php artisan queue:table 
$ php artisan migrate

DBにjobsというテーブルが作成される。

ジョブクラスをつくる

$ php artisan make:job IssueReciept

app\Jobs\配下にIssueReciept.phpファイルが生成される

function handle()に実処理を記述する。初期情報が必要な場合は__construct()に引数を渡す。

コントローラからジョブを呼び出す

use App\Jobs\IssueReciept;
public function doSomething(Request $request)
{
    IssueReciept::dispatch();
}

doSomethingを呼び出すとjobsテーブルに追加される。
がこのままでは何も実行しないので
php artisan queue:workで実行する

supervisorの設定

インストール

# yum install -y supervisor
# systemctl enable supervisord
# systemctl start supervisord

設定のひな型がないのでreadable.comから参照
artisanまでのパスは適宜修正
user 行はフロントエンドのuserを指定する(apache/nginx/forgeなど)

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=nginx
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log

sleepがjobsにキューを見に行く間隔(秒)。triesは最大試行回数。
その他オプション引数はreadable.com参照。

10
8
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
10
8