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

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

WBOY
WBOYオリジナル
2023-06-13 14:23:361324ブラウズ

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

Laravel は人気のある PHP フレームワークであり、その強力な機能により Web アプリケーション開発に最適です。 Laravel を使用すると、複雑な Web アプリケーションを迅速かつ簡単に作成できます。この記事では、非同期タスクの処理に役立つ機能である Laravel キューの使用について説明します。

非同期タスクの概念

ユーザーが Web アプリケーションでタスクを実行する場合、結果を取得する前にタスクが完了するまで待つ必要があります。これが同期タスクです。しかし、ユーザーがタスクの完了を待たずにタスクを処理したい場合はどうすればよいでしょうか?これは非同期タスクです。

非同期タスクは、結果を返す前にタスクの完了を待たないため、ユーザーのリアルタイム応答パフォーマンスには影響しません。代わりに、これらのタスクはキューに入れられ、バックグラウンドで 1 つずつ処理されます。たとえば、ユーザーがファイルをサーバーにアップロードするとします。ファイルが大きすぎるためにアップロードに時間がかかりすぎると、ユーザーは焦ってアップロードをキャンセルする可能性があります。この時点で、非同期タスクを使用すると、ユーザーの離脱を避けることができます。

Laravel キューは、非同期タスクの処理に役立つ Laravel フレームワークの一部です。

Laravel キューの構築

Laravel でキューを使用する最初のステップは、どのキューを処理する必要があるかをコンピューターに知らせることです。 Queue.php ファイルでは、キューを定義し、キューが使用するドライバーを指定できます。ドライバーには、ローカル ドライバー、データベース ドライバー、Redis ドライバー、Beanstalk ドライバーなどがあります。以下に例を示します。

'connection' => env('QUEUE_DRIVER', 'sync'),

'driver' => env('QUEUE_DRIVER', 'sync'),

'queue' => [

    'default' => [

        'connection' => 'default',

        'queue' => 'default',

        'retry_after' => 90,

        'backoff' => [

            'strategy' => 'exponential',

            'max_attempts' => 3,

            'delay' => 1000,

        ],

    ],

],

上記のコード例は、キューがデフォルトで「同期」ドライバーを使用することを示しています。ただし、.env ファイルで別のドライバーを定義できます。

キューの追加

キューとそのドライバーを定義したので、処理のためにタスクをキューに追加する必要があります。 Laravelフレームワークでは、タスクはdispatch()メソッドを使用してキューに追加されます。たとえば、次のコードを使用してタスクをキューに追加します。

ProcessPodcasts::dispatch($podcast);

上記のコードでは、ProcessPodcasts は実行するタスクであり、$podcast はタスクに渡されるパラメータです。

タスクの作成

次に、Laravel を使用して非同期タスクを作成しましょう。これを行うには、app/Jobs ディレクトリに新しい Job.php ファイルを作成します。以下はサンプル コードです:

<?php

namespace AppJobs;

use AppMailSendWelcomeEmail;
use AppUser;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesMail;

class SendWelcomeEmailJob implements ShouldQueue
{
    // Traits used by the class
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $user;

    /**
     * Create a new job instance.
     *
     * @param User $user
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->user->email)->send(new SendWelcomeEmail($this->user));
    }
}

上記のコードは、SendWelcomeEmailJob という名前の非同期タスクを作成します。このタスクは、新しいユーザーに電子メールを送信します。タスクはキュー内にあるため、ユーザーは電子メールの送信が完了するまで待つ必要がありません。

実行キュー

上記の操作により、タスクが作成され、キューに追加されました。ただし、キュー内のタスクを実行する必要があります。キューを実行するにはいくつかの方法があります。サンプルコードは次のとおりです:

php artisan queue:work 

上記のコードでは、Laravel CLI の queue:work コマンドを使用してキューを実行します。このコマンドは、処理するタスクがなくなるまで実行を続けます。

キューを実行するには、スーパーバイザーの助けを借りてキューを実行するなど、他の方法もあります。 Supervisor は、Laravel アプリケーションをバックグラウンドで管理できるようにするプロセス管理ツールです。スーパーバイザの助けを借りてキューを実行するには、次の手順に従います。

  1. スーパーバイザをインストールします (スーパーバイザの使用法を参照してください)。
  2. /etc/supervisor/conf.d ディレクトリに新しいファイル queue-worker.conf を作成します。
  3. 次のコードを入力してください:
[program:queue-worker]

process_name=%(program_name)s_%(process_num)02d

command=php /path/to/artisan queue:work 

autostart=true

autorestart=true

user=user

numprocs=1

redirect_stderr=true

stdout_logfile=/path/to/your/logs/queue-worker.log

上記のコードは、スーパーバイザのキュー ワーカーを作成します。スーパーバイザが起動すると、このプログラムはキューの処理を開始し、バックグラウンドで実行されます。

結論

この記事では、Laravel キューを使用して非同期タスク処理を行う方法を学びました。私たちはキューの概念について学び、新しいキューとドライバーを定義しました。また、非同期タスクを作成し、Laravel キューを使用してそれを実行する方法も確認しました。全体として、Laravel キューは Laravel 開発において非常に便利なコンポーネントであり、非同期タスクを簡単に処理するのに役立ちます。

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

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