Help us understand the problem. What is going on with this article?

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

キューはメール一斉送信や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参照。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away