Laravel キューとタスク スケジューラ: 多数のタスクを同時に処理する
現代の Web アプリケーション開発では、多数のタスクを同時に処理する必要があるシナリオがよくあります。加工された。たとえば、電子メールの送信、レポートの生成、ビッグデータの処理などです。ただし、タスクの量が非常に多い場合、これらのタスクの処理を 1 回要求すると、要求が長時間遅延したり、システム リソースが枯渇したりする可能性があります。この問題を解決するために、Laravelでは大量のタスクを同時に処理できるキューやタスクスケジューラ機能を提供しています。
1. Laravel Queue
Queue は、非同期処理のためにタスクをバックグラウンドにプッシュするメカニズムです。キューを介して、アプリケーションはユーザーのリクエストに影響を与えることなく、時間のかかる操作をバックグラウンドで処理できます。応答速度。
Laravel では、さまざまな方法を使用して、データベース キュー、Redis キュー、Beanstalkd キューなどのキュー関数を実装できます。ここでは、データベースキューを例として、同時処理タスクの機能を実装する方法を示します。
まず、Laravel の構成ファイル config/queue.php
でキュードライバーを構成する必要があります。データベース キューを使用することを選択し、connection
オプションを database
に設定し、データベース接続関連の構成をいくつか設定します。
'default' => env('QUEUE_CONNECTION', 'database'), 'connections' => [ 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'retry_after' => 90, ], ],
2. キュー テーブルの作成
次に、キュー タスクを保存するためのデータ テーブルを作成する必要があります。 Laravel が提供する Artisan コマンド php Artisan queue:table
を使用すると、移行ファイルを迅速に生成し、移行を実行できます。
php artisan queue:table php artisan migrate
次に、特定のタスク ロジックを処理するタスク クラスを作成する必要があります。 Laravel では、タスク クラスは通常 app/Jobs
ディレクトリに配置され、Artisan コマンド php 職人 make:job
を使用してタスク クラスをすばやく生成できます。
php artisan make:job SendEmail
生成されたタスク クラス SendEmail
は、app/Jobs
ディレクトリにあります。タスク ロジックは、このメソッドの handle
メソッドに記述できます。クラス。
<?php namespace AppJobs; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueSerializesModels; class SendEmail implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Execute the job. * * @return void */ public function handle() { // 处理发送邮件的逻辑 // ... } }
タスク クラスでは、ShouldQueue
インターフェイスを実装し、タスク ロジックを処理するための handle
メソッドを定義する必要があります。
最後に、次のコードを使用してタスクをキューにプッシュできます。
use AppJobsSendEmail; SendEmail::dispatch();
dispatch
メソッドを通じてタスクをキューに追加すると、システムは設定に従って、処理する対応するキュー ドライバーを自動的に選択します。
2. Laravel タスクスケジューラ
Laravel には定期的または定期的に実行するタスクを設定できるタスクスケジューラ機能も用意されています。 Laravel 独自のスケジュール (Laravel Time Scheduling) を通じてタスク実行ルールを設定できます。
まず、app/Console/Kernel.php## で
schedule メソッドを設定する必要があります。 # file タスクのスケジュールを定義します。たとえば、1分ごとに実行されるタスクを定義します。
protected function schedule(Schedule $schedule) { $schedule->job(new SendEmail)->everyMinute(); }
SendEmail をスケジュールの実行本体として使用し、
everyMinute# を通じてタスクの実行頻度を 1 分に 1 回に設定します。 ## 方法。
Linux システムでは、
crontab コマンドを使用して Cron 式を編集および設定できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:bash;toolbar:false;'>crontab -e</pre><div class="contentsignin">ログイン後にコピー</div></div>
次に、開いたファイルに次のコードを追加します。
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
上記のコードは、
php Artisanschedule:run コマンドが 1 分ごとに実行されることを意味します。タスクのスケジュール設定がトリガーされます。 上記の構成により、タスクのスケジュール実行と定期実行の機能を実現できます。
要約:
Laravel キューとタスク スケジューラの機能を通じて、多数のタスクを同時に処理する必要性を簡単に認識できます。キューはタスクをバックグラウンドにプッシュして非同期処理を行い、ユーザー要求のブロックを回避できます。タスク スケジューラを使用すると、タスクを時間ルールに従って定期的に実行できるため、タスクの処理効率が向上します。
以上はLaravelのキューとタスクスケジューラの紹介でしたので、皆さんのお役に立てれば幸いです。
以上がLaravelキューとタスクスケジューラ: 多数のタスクを同時に処理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。