Laravel によるキューイングとタスクのスケジューリング: アプリケーションの同時実行性の向上

WBOY
リリース: 2023-08-13 17:49:42
オリジナル
1440 人が閲覧しました

Laravel によるキューイングとタスクのスケジューリング: アプリケーションの同時実行性の向上

Laravel を使用したキュー処理とタスク スケジューリング: アプリケーションの同時実行性の向上

要約:
Web アプリケーションを開発するときは、通常、次のようなさまざまなバックグラウンド タスクを処理する必要があります。電子メールの送信、レポートの生成、または大量のデータの処理。これらのタスクには時間がかかる場合があり、これらのタスクをリクエスト処理プロセスに直接入れると、応答時間が遅くなります。アプリケーションの同時実行性を向上させるために、Laravel のキュー処理機能とタスク スケジューリング機能を使用できます。

1. キュー処理とタスクのスケジューリングとは何ですか?
Laravel では、キュー処理は時間のかかるタスクをバックグラウンド処理に延期する方法です。タスクのスケジューリングは、特定の時間に、または特定のルールに従って実行されるようにタスクを配置する方法です。キュー処理とタスク スケジューリングを使用すると、タスクをメッセージ キューに入れてバックグラウンド プロセスによって非同期に処理できるため、ユーザー リクエストの待ち時間が短縮され、アプリケーションの同時実行性が向上します。

2. キュー処理の設定

  1. キュー処理ドライバーのインストール
    Laravel では、Redis、Beanstalkd、database など、さまざまなキュー処理ドライバーを選択できます。構成ファイルを通じて選択と設定を行うことができます。たとえば、.env ファイルで QUEUE_CONNECTION 変数を設定することで、Redis ドライバーの使用を選択できます。

    QUEUE_CONNECTION=redis
    ログイン後にコピー
  2. タスク クラスの作成
    Laravel では、次のように作成してタスク クラスを定義できます。タスククラス キューによって処理される特定のタスク。アーティザン コマンドを使用して新しいタスク クラスを作成できます。たとえば、電子メール送信タスクを作成できます:

    php artisan make:job SendEmail
    ログイン後にコピー

    これにより、app/Jobs ディレクトリに SendEmail.php タスク クラスが作成されます。

  3. キュー処理ロジックの書き込み
    タスク クラスでは、特定のキュー処理ロジックを定義できます。たとえば、SendEmail タスク クラスでは、Laravel が提供するメール クラスを使用して電子メールを送信できます。

    <?php
    namespace AppJobs;
    use IlluminateBusQueueable;
    use IlluminateContractsQueueShouldQueue;
    use IlluminateFoundationBusDispatchable;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateQueueSerializesModels;
    use IlluminateSupportFacadesMail;
    class SendEmail implements ShouldQueue
    {
     use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
     protected $email;
     protected $subject;
     protected $body;
     public function __construct($email, $subject, $body)
     {
         $this->email = $email;
         $this->subject = $subject;
         $this->body = $body;
     }
     public function handle()
     {
         Mail::to($this->email)->send(new AppMailNotification($this->subject, $this->body));
     }
    }
    ログイン後にコピー
  4. Queue Task Call
    電子メールを送信する必要がある場合、次のコードは、SendEmail タスクをキューに追加します。

    SendEmail::dispatch($email, $subject, $body);
    ログイン後にコピー

    これにより、SendEmail タスクがキューに追加され、バックグラウンド プロセスによって処理されます。

3. タスクのスケジューリング
Laravel は、特定の時間やルールに従ってタスクの実行を調整できるタスク スケジューラーも提供します。アーティザン コマンドを使用して、タスク スケジュールを作成および管理できます。

  1. タスク スケジュール ファイルの作成
    次のコマンドを使用して、新しいタスク スケジュール ファイルを作成します:

    php artisan make:console SendReport
    ログイン後にコピー

    これにより、アプリ/コンソール/コマンドに SendReport が作成されます。ディレクトリ .php タスク スケジュール ファイル。

  2. タスク スケジューリング ロジックの作成
    タスク スケジューリング ファイルでは、タスク スケジューリングの特定のロジックを定義できます。たとえば、SendReport タスク スケジュール ファイルでは、レポートを生成するコードを記述することができます。

    <?php
    namespace AppConsoleCommands;
    use IlluminateConsoleCommand;
    class SendReport extends Command
    {
     protected $signature = 'report:send';
     protected $description = 'Send report';
     public function __construct()
     {
         parent::__construct();
     }
     public function handle()
     {
         // Generate and send report
     }
    }
    ログイン後にコピー
  3. タスク スケジュール ポリシーの構成
    アプリ/コンソールで構成できます。 /Kernel.php ファイル タスクのスケジューリング戦略。たとえば、次のコードをスケジュール メソッドに追加して、SendReport タスクを毎朝 8 時にスケジュールすることができます。

    protected function schedule(Schedule $schedule)
    {
     $schedule->command('report:send')->dailyAt('08:00');
    }
    ログイン後にコピー
  4. タスク スケジューラを開始する
    次のコマンドを使用します。タスク スケジューラを開始するには:

    php artisan schedule:run
    ログイン後にコピー

    これにより、schedule メソッドで構成したルールに従ってタスクのスケジュールが実行されます。

結論:
Laravel をキュー処理とタスクのスケジューリングに使用すると、アプリケーションの同時実行性を効果的に向上させることができます。時間のかかるタスクをバックグラウンドで処理することを延期することで、ユーザーのリクエストの待ち時間を短縮し、ユーザー エクスペリエンスを向上させることができます。シンプルな構成とキュー処理およびタスク スケジューリング機能の柔軟な呼び出しにより、それらをアプリケーションに簡単に統合できます。

この記事が、Laravel のキュー処理機能とタスクスケジューリング機能の理解と使用に役立つことを願っています。

以上がLaravel によるキューイングとタスクのスケジューリング: アプリケーションの同時実行性の向上の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート