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