ホームページ >PHPフレームワーク >Laravel >Laravel 開発: Laravel Queue を使用して非同期タスクを処理する方法は?

Laravel 開発: Laravel Queue を使用して非同期タスクを処理する方法は?

WBOY
WBOYオリジナル
2023-06-13 20:32:012260ブラウズ

アプリケーションが複雑になるにつれて、大量のデータとプロセスの処理と管理が課題になります。この状況に対処するために、Laravel はユーザーに Laravel Queue (キュー) という非常に強力なツールを提供します。これにより、開発者は、ユーザー インターフェイスに影響を与えることなく、電子メールの送信、PDF の生成、画像のトリミングの処理などのタスクをバックグラウンドで実行できます。この記事では、Laravel キューの使用方法について詳しく説明します。

Laravel Queueとは

キューは情報を処理および管理する方法であり、スタックのような構造、つまり先入れ先出し方式です。キューは非同期処理に使用できます。つまり、ユーザーは、長時間実行されているプロセスが完了するのを待たずに作業を続行できます。 Laravel Queue は、Web アプリケーションのパフォーマンスに悪影響を与えることなく、非常に時間のかかるタスクをバックグラウンドで実行できる、組み込みの Redis または Beanstalk ベースのキュー システムです。

Laravel Queueの利点

キューシステムを使用すると、一部のタスクの完了に時間がかかることがあります。 Laravel キューの明らかな利点は、リクエストとレスポンスの間にこれらのタスクが完了するのを待たずに処理できることです。これは、大量のデータや長時間実行されるタスクを処理する必要があるアプリケーションの場合、多くのタスクを処理しながら実行するスレッドやプロセスを少なくできることを意味します。 Laravel キューの利点の一部を以下に示します。

  1. 長時間実行されるタスクは、Web リクエストのパフォーマンスに影響を与えません。
  2. さらにタスクを追加できるため、より多くの操作を処理できます。
  3. 電子メールの送信や PDF の生成など、時間がかかり、すぐに応答する必要のないタスクを処理できます。
  4. バックグラウンドでのタスク処理をスケジュールして、各リクエストの時間を節約できます。
  5. エラーや障害を処理する機会を持つシステムを構築できます。

Laravel キューにタスクを追加する方法

Laravel では、Artisan コマンドラインを使用してタスクをキューに追加できます。これを行うには、コマンドを作成し、実行するタスクを定義します。タスクには、電子メール処理や PDF 生成ソフトウェアの使用など、任意の機能を指定できます。

たとえば、タスクをキューに追加する場合は、次のコマンドを使用します。

php artisan queue:work

このコマンドは、アプリケーションに動作を開始し、他のすべてのコマンドを処理するように指示します。

Laravel キューの動作原理

Laravel キューは、メッセージパッシングに基づいたキューシステムです。一般的なキュー システムには、次の 3 つの主要なコンポーネントがあります:

  • プロデューサー: プロデューサーは、メッセージをキューに送信する役割を担うアプリケーションまたはプロセスであり、キューでメッセージが処理されるか、後で処理されます。
  • 均一キュー: キューはメッセージを格納する仮想コンテナであり、各メッセージは特定のキューに属します。これにより、各タスクが先入れ先出し順序でキューから処理または実行されることが保証されます。
  • コンシューマ: コンシューマは、キュー内の未処理のメッセージを処理するプロセスまたはアプリケーションです。

Laravel キューでは、アプリケーションはプロデューサーとコンシューマーです。次のコマンドを使用して、タスクをキューに追加できます。

php artisan queue:work

このコマンドは、コンシューマを開始し、ジョブを開始し、他のすべてのコマンドを処理します。次に、次のコマンドを使用してデータをキューに追加できます。

php artisan queue:listen

Laravel キューの使用方法

Laravel キュー システムは非常に使いやすいです。その使用方法をよりよく理解するために、電子メールの送信に使用する方法を詳しく見ていきます。電子メールを送信するタスクを作成し、バックグラウンドで実行します。

ステップ 1: Laravel アプリケーションでタスクを作成する

新しいタスク クラスを作成し、電子メール アドレス、件名、コンテンツなどの必要な関数と変数を定義します。次の例は、SendEmail という名前のタスク クラスを示しています。

namespace AppJobs;
use AppMailsSendUserEmails;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $request;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($request)
    {
        $this->request = $request;
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $email = new SendUserEmails($this->request);
        Mailer::send($email);
    }
}

このタスクは、SendEmail クラスに渡される電子メール リクエストを作成します。

ステップ 2: タスクをキューに追加する

SendEmail クラスを設定したので、タスクをキューに追加する必要があります。次のコマンドを使用してタスクをキューに追加します。

SendEmail::dispatch($request)->delay(now()->addSeconds(10));

このコマンドは、10 秒後にタスクを実行するようにキューに指示します。遅延機能を使用すると、タスクの実行を遅らせて、失敗したタスクを予測し、タスクを実行する前に問題の解決を試みることができます。

ステップ 3: キュー内のタスクを処理する

最後に、キュー内のタスクを処理する必要があります。次のコマンドを使用して、キュー内で実行を待機しているタスクを処理できます。

php artisan queue:work

このコマンドを使用すると、キュー内のすべてのリクエストを処理する新しいキュー ハンドラーを開始できます。リクエストはキューに追加された順序で処理されます。

結論

Laravel キューは、Laravel フレームワークによって提供される非常に重要なツールであり、すべての非同期タスクを効率的に処理できるようになります。アプリケーションは大量のデータを効率的に処理でき、顧客はキューイングと処理操作を最適化することで最適なパフォーマンスを享受できます。この記事では、Laravel キューを使用してメールを送信する方法と、キューにタスクを追加する方法について詳しく説明しました。ただし、Laravel キューは、複雑なアプリケーションの他の側面を処理する場合にも非常に役立ちます。 Larevel キューは、非常に信頼性が高く、使いやすいキュー システムであることが証明されています。

以上がLaravel 開発: Laravel Queue を使用して非同期タスクを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。