0
0

はじめに

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_workerlaravel_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を使用する必要がありそうですので
それぞれのアーキテクチャに合わせて技術選定を行うと良いかと思います

参考リンク

0
0
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
0
0