はじめに
Laravelのキューは同じプロジェクト配下のジョブを実行させるのには便利ですが、並列処理を行うにはSuperVisorというプロセス管理ツールが必要です
本記事ではLaravelのキューを並列処理するためのSupervisorの基本的な知識と設定方法を詳しく見ていきます
Supervisorのインストール方法
UbuntuやDebianではaptでインストールできます
sudo apt-get update
sudo apt-get install -y supervisor
バージョンが確認できればインストール完了です
supervisord -v
3.3.1
Laravelのキュー設定
次にLaravelのキューを設定します.env
を編集して、キューのデフォルトドライバーを設定します
QUEUE_CONNECTION=database
次にキューテーブルを作成します
php artisan queue:table
php artisan migrate
Supervisorの設定ファイルの作成
Supervisorの設定ファイルを作成して、Laravelのキューワーカーを管理します
設定ファイルは/etc/supervisor/conf.d
ディレクトリに配置します
例として、laravel-worker.conf
というファイルを作成します
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/laravel/artisan queue:work --sleep=3 --tries=3 --timeout=90 --queue=laravel_worker
autostart=true
autorestart=true
user=youruser
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/laravel/worker.log
[program:laravel-worker2]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/laravel/artisan queue:work --sleep=3 --tries=3 --timeout=90 --queue=laravel_worker2
autostart=true
autorestart=true
user=youruser
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/laravel/worker.log
上記でlaravel_worker
とlaravel_worker2
の2つのキューを起動できます
これで並列処理が実現できるようになりました
設定ファイルの簡単な説明は下記になります
-
command
- キューワーカーを起動するためのコマンドです
-
autostart
- Supervisorの起動時に自動的にプロセスを開始するかどうかを指定します
-
autorestart
- プロセスが終了した場合に自動的に再起動するかどうかを指定します
-
user
- プロセスを実行するユーザーを指定します
-
numprocs
- 起動するプロセスの数を指定します
-
stdout_logfile
- ログファイルのパスを指定します
設定ファイルを保存したら、Supervisorを再起動して設定を反映させます
sudo supervisorctl reread (re + readですね reloadの間違いかと思いましたw)
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
SuperVisorとLaravelキューの連携方法
SuperVisorがLaravelのキューワーカーを正しく管理しているか確認します
sudo supervisorctl status
基本的なトラブルシューティング
プロセスが起動しない場合
- 設定ファイルに誤りがないか確認します
- ログファイルを確認して、エラーメッセージをチェックします
キューワーカーがジョブを処理しない場合
- キューの設定が正しいか確認します
-
php artisan queue:work
コマンドを手動で実行して、エラーメッセージが表示されるか確認します
まとめ
Supervisorを使用することで、キューワーカーを効率的に管理し、安定した並列処理を実現できます
これにより、Laravelアプリケーションのパフォーマンスを向上させることができます
補足
言語やフレームワーク単体で行いたい場合は、GolangやPythonを使用する必要がありそうですので
それぞれのアーキテクチャに合わせて技術選定を行うと良いかと思います
参考リンク