ホームページ >PHPフレームワーク >Laravel >Laravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理するにはどうすればよいですか?

Laravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理するにはどうすればよいですか?

王林
王林オリジナル
2023-06-13 16:04:16924ブラウズ

Laravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理する方法は?

最新の Web アプリケーションでは、非同期タスクが日常業務に不可欠な部分になっています。非同期タスクにより、アプリケーションの応答時間が短縮され、ユーザー エクスペリエンスが最適化され、アプリケーションのスケーラビリティが向上します。 Laravel Queues は、非同期タスクとメッセージ キューを処理するために Laravel フレームワークによって提供される強力なツールです。この記事では、Laravel キューの概念と使用法を紹介し、それを Supervisor と組み合わせて非同期タスクを管理します。

Laravel キューとは何ですか?

Laravel Queues は、非同期タスクとメッセージ キューを処理するためのメソッドです。 Laravel キューを使用すると、Web リクエストの応答時間に影響を与えることなく、時間のかかるタスクをキューに入れることができます。たとえば、電子メールの送信、ビデオの処理、PDF の生成などはすべて時間のかかる操作ですが、キューを使用してこれらの操作をバックグラウンド処理に置くことで、アプリケーションの効率と応答性を高めることができます。

Laravel Queues は、いくつかの組み込みキュードライバーを通じて、データベース、Redis、Beanstalkd、Amazon SQS などの複数のバックエンドテクノロジーをサポートします。これにより、開発者は好みのキューイング テクノロジを使用して非同期タスクを処理できるようになります。

Laravel キューの使用

以下では、Laravel キューを使用して非同期タスクを処理する方法を段階的に紹介します。

ステップ 1: キュー ドライバーを構成する

Laravel 構成ファイルには、キューとキュー ドライバーの構成に使用できる queue.php という名前のファイルがあります。次のコマンドを使用して queue.php ファイルを生成できます:

php artisan queue:table
php artisan queue:failed-table
php artisan migrate

これにより、移行ファイルとキュー テーブルが生成されます。移行コマンドを実行して移行を実行します。

queue.php ファイルでは、さまざまなキュー ドライバーの使用を選択できます。

  • データベース ドライバー - タスクをデータベースに保存します。エントリーレベルのキューイング システムとして。
  • Redis ドライバー - Redis の組み込みキュー サポートを使用します。
  • Beanstalkd ドライバー - Beanstalkd メッセージ キュー サービスを使用します。
  • Amazon SQS ドライバー - Amazon Simple Queue Service (SQS) を使用します。

たとえば、Redis キュー ドライバーを使用する場合は、queue.php ファイルを次のように構成してください:

'default' => env('QUEUE_CONNECTION', 'redis'),
'connections' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => env('REDIS_QUEUE', 'default'),
        'retry_after' => 90,
        'block_for' => null,
    ],
]

ステップ 2: キュー タスク クラスを作成する

次に、非同期タスクを処理するキュー タスク クラスを作成する必要があります。このクラスは、タスクのロジックを定義する単純な PHP クラスである必要があります。たとえば、次のコードは電子メールを送信するための非同期タスク クラスです。

class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $email;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($email)
    {
        $this->email = $email;
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Mail::to($this->email)->send(new WelcomeEmail());
    }
}

このクラスは、ShouldQueue インターフェイスを実装します。このクラスは、このクラスを非同期タスク クラスに変換するように Laravel に指示するために必要です。 handle() メソッドはタスクの特定のロジックを定義するため、非同期で処理する必要があるタスクをここで実行できます。

ステップ 3: タスクをキューにプッシュする

キュー タスクとキュー ドライバーの準備ができたので、次のステップはタスクをキューに入れることです。次のコードを使用して、プロジェクト内の任意の場所で Eloquent キューを呼び出します:

use AppJobsSendEmail; 
use IlluminateSupportFacadesQueue;
...
Queue::push(new SendEmail('example@test.com'));

または、以下に示すように、dispatch() メソッドを使用してタスクをキューに入れることもできます:

SendEmail::dispatch('example@test.com');

ステップ 4 :キュータスクの実行

タスクをキューに入れると、タスクはキューにディスパッチされ、実行を待ちます。次のコードを使用してキューを実行できます。

php artisan queue:work

このコマンドを実行すると、リスナーが開始され、キュー内のタスクが処理されます。

スーパーバイザーを使用して非同期タスクを管理する

キュー タスクはバックグラウンドで実行する必要があるため、タスクが継続的に実行できるようにサーバー上にプロセス デーモンをセットアップする必要があります。スーパーバイザは、バックグラウンド プロセスが異常終了しないことを保証し、必要に応じて再起動する、一般的に使用されるプロセス デーモンです。

ステップ 1: スーパーバイザーをインストールする

Ubuntu システムでは、次のコマンドを使用してスーパーバイザーをインストールできます:

sudo apt-get update
sudo apt-get install supervisor

ステップ 2: スーパーバイザー構成ファイルを作成する

/etc/supervisor/conf.d ディレクトリに構成ファイル (myqueue.conf など) を作成します。

nano /etc/supervisor/conf.d/myqueue.conf

次の内容を構成ファイルに追加し、必ずパス、コマンド、ユーザー名を変更してください。使用しているプログラムに合わせてください:

[program:myqueue]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /path/to/artisan queue:work --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=username
numprocs=1
redirect_stderr=true
stdout_logfile=/path/to/storage/logs/myqueue.log

ステップ 3: スーパーバイザのリロード

スーパーバイザの設定ファイルを変更した後、設定ファイルをリロードするようにスーパーバイザに通知する必要があります。次のコマンドを使用してスーパーバイザをリロードします。

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start all

ステップ 4: スーパーバイザのログを表示する

スーパーバイザのログ ファイルで、非同期タスクの出力とエラー情報を表示できます。たとえば、構成ファイルで指定されたパスとログ ファイル名を表示することで、スーパーバイザーのログを表示できます。

tail -f /path/to/storage/logs/myqueue.log

結論

この記事では、Laravel キューとスーパーバイザーを使用して非同期を管理する方法を紹介します。 Laravel キューを使用すると、時間のかかるタスクを簡単にキューに入れることができ、アプリケーションの効率と応答性が向上します。スーパーバイザを使用すると、バックグラウンド タスクが継続的に実行され、必要に応じて自動的に再起動できるようになります。この記事があなたの成長に役立つことを願っています。

以上がLaravel 開発: Laravel キューとスーパーバイザーを使用して非同期タスクを管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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