ホームページ > PHPフレームワーク > Laravel > laravelでキューを設定して使用する方法

laravelでキューを設定して使用する方法

PHPz
リリース: 2023-04-03 19:20:00
オリジナル
1960 人が閲覧しました

Laravel は、開発者が高品質の Web アプリケーションを迅速に構築できるようにする一連の強力なツールと機能を提供する人気のオープンソース PHP フレームワークです。

Queue は、Laravel フレームワークで非常に重要でよく使用される関数です。これにより、時間のかかるタスクをキューに入れて非同期で実行できるため、Web アプリケーションのパフォーマンスと信頼性が向上します。この記事では、Laravel フレームワークでキューを使用する方法を説明します。

1. Laravel キューの設定

キューの使用を開始する前に、Laravel キューを設定する必要があります。 Laravel 5.1以降では、artisanコマンドを使用してキュー構成ファイルを生成できます。

php artisan queue:table

php artisan migrate
ログイン後にコピー

上記のコードは、キュータスクに関する情報を保存するために使用されるジョブデータテーブルを生成します。さらに、Laravel を使用すると、データベース、Redis、Amazon SQS などを含むさまざまなキュードライバーを使用できます。構成ファイルを使用して、必要なキュードライバーを設定できます。例:

'default' => env('QUEUE_DRIVER', 'mysql'),

'connections' => [
        
        'mysql' => [
            'driver' => 'mysql',
            'host'   => env('DB_HOST', 'localhost'),
            'queue' => 'default',
            'table' => 'jobs',
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'database' => env('DB_DATABASE', 'forge'),
            'prefix' => '',
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'expire' => 60,
        ],

        'sqs' => [
            'driver' => 'sqs',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'prefix' => env('AWS_SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
            'queue' => env('AWS_SQS_QUEUE', 'default'),
            'region' => env('AWS_REGION', 'us-east-1'),
        ],
],
ログイン後にコピー

2. キュータスクの作成

Laravel キュー構成を取得したら、キュータスクの作成を開始できます。 Laravel では、すべてのキュータスクはシリアル化可能なクラスである必要があり、Illuminate\Contracts\Queue\ShouldQueue インターフェイスを実装することで定義できます。例:

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

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

    protected $user;
    protected $content;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // 发送邮件给用户
        Mail::to($this->user)->send(new WelcomeMail($this->content));
    }
}
ログイン後にコピー

上記のコードでは、コンストラクターでユーザーと電子メールの内容の文字列を受け入れる SendEmail という名前のキュー タスク クラスを定義します。このクラスは ShouldQueue インターフェイスを実装しているため、Laravel はタスクが現在のリクエストで直接実行されるのではなくキューに追加されるべきであることを認識します。

3. キュー タスクをプッシュする

キュー タスクを作成したら、次のステップはタスクをキューにプッシュすることです。 Laravel では、Queue ファサードを使用してこれを行うことができます。例:

use Illuminate\Support\Facades\Queue;

$user = User::find(1);
$content = '欢迎加入我们的网站!';

Queue::push(new SendEmail($user, $content));
ログイン後にコピー

上記のコードでは、キュー ファサードを使用して SendEmail タスクをキューにプッシュします。タスクが処理されると、ウェルカム電子メールがユーザーに送信されます。

4. キュー タスクの実行

タスクをキューにプッシュしたので、次の問題はタスクを実行する方法です。 Laravel では、キュータスクの実行は非常に簡単です。次の職人コマンドを実行するだけです:

php artisan queue:work
ログイン後にコピー

このコマンドは、キューのタスクをリッスンして順番に実行するリスナーを起動します。キュータスクの処理が完了すると、リスナーは自動的に停止します。

この方法でリスナーを開始することに加えて、Laravel はキューのタスクを実行する別の方法、つまりキューのメッセージ サーバーを使用する方法も提供します。たとえば、Redis キュー ドライバーを使用する場合、次のコマンドを使用してキュー メッセージ サーバーを起動できます。

php artisan queue:listen redis
ログイン後にコピー

このコマンドは、Redis キューをリッスンし、キュー タスクを実行するキュー リスナーを起動します。順序。

5. キュータスクの監視

最後に、Laravel はキュータスクの実行を監視する強力なツールのセットも提供します。次のコマンドを使用して、現在のキュー内のタスクを表示できます。

php artisan queue:work --status
ログイン後にコピー

このコマンドは、現在のキュー内のすべてのタスクを表示し、タスクの ID、キュー、ステータス、およびその他の情報を提供します。

さらに、Laravel はキューの監視および管理ツールの完全なセットも提供します。 Laravel Horizo​​n または Laravel Telescope を使用してキュー タスクの実行を監視でき、これらのツールはリアルタイムのタスク実行結果、統計情報、完全な例外処理、その他の機能を提供できます。

概要

この時点で、Laravel キューの基本的な使い方をマスターしました。キューを使用すると、特に時間のかかるタスクを実行する必要がある場合に、Web アプリケーションのパフォーマンスと信頼性が大幅に向上します。 Laravel アプリケーションを開発していて、そのパフォーマンスを最適化したい場合、キューの使用は欠かせないツールです。

以上がlaravelでキューを設定して使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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