2017-08-18 6 views
0

Laravelで電子メールを送信するためのキューを実装したいと考えています。キューは正常に動作していますが、効率が心配です。これらは私の設定です:Laravelで電子メールキューを実装する最も効率的な方法

ローカルデータベースでキューを使用するためにjobsテーブルを作成し、.envファイルを設定しました。

私は、サーバー上でこのcrontabの設定している:

* * * * * php /var/www/imagine.dev/artisan schedule:run >> /dev/null 2>&1 

をアプリ\ Conosle \ Kernel.phpにスケジュールを設定しているので、私は手動で「キュー:聞く」を入力する必要がいけないすべてのコンソールを介して時間。

$schedule->command('queue:listen'); 

今質問します。これが効率的かどうかを知りたいですか?私はキューを持つことについて心配しています:バックグラウンド消費CPUとメモリで常に実行されて聞いてください。私は唯一のキューを実行しようとしている

:5分ごとを聞いて、その後、

$schedule->command('queue:listen --sleep 300'); 

が、再びと一緒に寝て、それを入れて、これが最善のアプローチであるかどうかわからないです。

私が試したもう一つの試みは 'queue:work'ですが、これは一度に1つのキューしか処理しません。

理想的には、5分ごとにすべてのキューを処理し、メモリとCPUの一定した使用を避ける方法が好きです。

最良のアプローチは何ですか?

+0

アプリケーションは、 'queue:listen'メソッドの呼び出し時に完全にブートストラップされます。これにより、必要なCPUの量が大幅に削減されます。しかし、アプリケーションはメモリに結びついているので、そこにいくつかの使用法があります。その使用法は、ブートストラップにどれだけ追加したかによって決まります(私は99%のケースのように最小限に抑えます)。それは、これらの電子メールが絶対的に大規模でない限り、使用量はごくわずかです。私は一貫して1日に数万の電子メールを送り、何の問題もありません。 – Ohgodwhy

+0

@Ohgodwhyあなたは私が単にキューを使用することをお勧めしますか:プロダクションを聞きますか?タイムアウトなしで? –

答えて

0

あなたが使用しているLaravelのバージョンは不明ですが、それは5.2以前のものと思われます。 毎分これを実行する必要はなく、手動で停止するまで実行を続けます。 Laravel 5.2ドキュメントから

:それは手動で停止されるまで、一度この作業が開始されている、それは実行し続けます

注意。スーパーバイザーなどのプロセスモニターを使用して、キューリスナーが実行を停止しないようにすることができます。

だから、多分あなたは、これがすべてで有用であるならば、あなたは$スケジュールの上にチェーン、することができ、またSupervisor

に見てみたい - )> everyFiveMinutes(。他にもいくつかの方法があります。 Laravel Scheduling

関連する問題