私はLaravelデータベースドライバーとスーパーバイザーを使用してキューを使用し、キューワーカーを常に実行し続けています:
[program:laravel_queue]
command=php artisan queue:listen --timeout=1800 --tries=5
directory=/var/app/current
stdout_logfile=/var/app/support/logs/laravel-queue.log
logfile_maxbytes=0
logfile_backups=0
redirect_stderr=true
autostart=true
autorestart=true
startretries=86400
EOB
一部のキュータスクは、完了するまでに約10分かかる場合があります。
私は質問に2つの部分があります:
1)上記のスクリプトを編集して、同じキューで複数(例:3)のキューワーカーを実行するにはどうすればよいですか?.
2)処理を待機しているジョブの数に基づいて実行中のキューワーカーの数をスケーリングする方法はありますか?
質問2の理由は、忙しい時間と静かな時間がたくさんあるため、3人のリスナーが常に実行している状態でリソースを無駄にしたくないからです。
スーパーバイザーaddnumprocs = 5を使用して複数のジョブを自動的に実行するには、スーパーバイザーが一度に5つのプロセスを実行し、それらすべてを監視することを意味します。この訪問についてもっと知るために- https://cloudtoolz.io/queue-laravel-in-database/
Laravel docs からnumprocs=3
を使用して3つのプロセスを生成できます。
また、キューを指定します:command=php artisan queue:listen --queue=myqueue --tries=5
スーパーバイザー設定ファイル内。次のコードを追加します
process_name=%(program_name)s_%(process_num)02d
numprocs=8
これにより、プログラムの8つの異なるプロセスが作成されます。必要に応じて、numprocs=8
の値を変更する必要があります。
Sudo supervisorctl status
で実行中のプロセスの数を確認できます