supervisorとLaravelのQueueを使ってみた
はじめに
CYBIRDエンジニア Advent Calendar 7日目担当の @kenta_kitagawa です。
サーバサイドの業務を担当しています。
6日目は @cy_ssssさんによる「Unityにまつわる入社前後の変化」でした。
入社した頃の初心を思い出します。
今回の最終目標
弊社はマスターデータ投入の際に事前検証用のdatabaseを毎回作り、検証作業が終わったら検証用databaseを削除する運用をしています。
上記の処理に時間が掛かるので、トリガーはGUIからの操作で、削除処理はバックグラウンドで行えるようにして複数のデータベースを削除する手間を省きます。
そこで
php artisan database:drop {database_name}
上記コマンドをviewから実行し、バックグラウンドで処理できるようにします。
databaseクラスはCommandクラスを継承して実装してます。
やること
・Laravelのキューを使う
・LaravelのキューはDatabaseを使って実装
・supervisorのインストールと設定
・supervisorでキューワーカーを起動
・Controllerからコマンドを実行
環境
・Vagrant 2.2.16
・VirtualBox 6.1.22 r144080
・CentOS Linux release 7.3.1611
導入手順(view、Controllerの導入、実装は割愛)
vagrant ssh
sudo yum install supervisor
sudo vi /etc/supervisord.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
# artisanがある階層
command=php /home/hoge/artisan queue:work
# ログを吐く階層とファイル名
stdout_logfile=/home/hoge/worker.log
# commandを実行するユーザ
user=hoge
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stopwaitsecs=3600
sudo vi /etc/supervisord.conf
# 一番下の [include] の部分を変更
files = supervisord.d/*.conf
sudo service supervisord start
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
php artisan queue:table
php artisan migrate
QUEUE_DRIVER=database
$params = [
'database_name' => $database_name
];
// jobs にレコード挿入
Artisan::queue('database:drop', $params)->onConnection('database');
jobsテーブルにレコードがあるとキューワーカーが自動で処理を実行してくれます。
さいごに
今まで手動で何度もコマンドを叩いていたものをキューを使うことによって一度にたくさん実行してもバックグラウンドでキューワーカが自動で処理してくれるようになりました。
明日のCYBIRDエンジニア Advent Calendar 2021 8日目は、 @yuki_utsumi さんによる「数十TBのデータをGoogleドライブにアップしよう」です。
どんな内容なのかとても気になります!
ありがとうございました!
Author And Source
この問題について(supervisorとLaravelのQueueを使ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/kenta_kitagawa/items/c9144fe0e33e4e98d844著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .