ホームページ >PHPフレームワーク >ThinkPHP >キューを使用して ThinkPHP6 で非同期タスクを実装するにはどうすればよいですか?

キューを使用して ThinkPHP6 で非同期タスクを実装するにはどうすればよいですか?

PHPz
PHPzオリジナル
2023-06-12 10:46:403001ブラウズ

インターネット アプリケーションと情報システムの継続的な開発に伴い、多くの企業は、複雑なロジックや高いパフォーマンス要件を伴う操作を処理するために非同期タスクを使用する必要があります。しかし、従来の同期処理方式ではシステム性能への負荷が大きくなるため、メッセージキューを利用した非同期タスク処理を実現することで解決できます。この記事では、キューを使用して ThinkPHP6 フレームワークで非同期タスクを実装する方法を紹介します。

1. インストールと構成

1.1 拡張機能をダウンロードしてインストールします

ThinkPHP6 では、Queue コンポーネントを使用してキュー処理を実装できます。次のように、composer.json ファイルに依存関係を追加してインストールします。

composer require topthink/think-queue

1.2 構成ファイル

インストールが成功した後、構成ファイルをプロジェクトに追加し、関連する構成を実行する必要があります。 config ディレクトリに新しい queue.php ファイルを作成し、次の設定項目を追加します。

return [
    'default' => env('queue.driver', 'sync'),

    'connections' => [
        'sync' => [
            'driver' => 'sync',
        ],
        'redis' => [
            'driver' => 'redis',
            'queue' => 'default',
            'connection' => 'default',
            'retry_after' => 90,
            'block_for' => null,
        ],
    ],
];

これは主に、キューのデフォルトのドライバと接続方法を設定するためのものです。このうち、同期 (sync) と Redis (redis) の 2 つの駆動方法をサポートしています。 Redis は、さまざまなデータ構造、特にキーと値のペア、リスト、セット、ハッシュ、その他のデータ構造をサポートできる分散型インメモリ データベースです。 ThinkPHP6 の Queue コンポーネントでは、メッセージ キューの保存方法として Redis ドライバーを使用することもできます。

さらに、キュー名 (queue)、接続名 (connection)、再試行時間 (retry_after) など、キューに対して他の構成を実行することもできます。

上記の設定項目は、アプリケーション設定ファイル(config/app.php)や環境設定ファイルでも設定できます。

2. キュー タスクの作成

ThinkPHP 6 の場合、ファクトリ モードを使用してキュー タスクを作成でき、同時に、キュー タスクを継承することで特定のタスク ロジックを実装できます。ジョブクラス。

2.1 ファクトリの作成

app/job ディレクトリに Job.php ファイルを作成し、特定のキュー メッセージを処理するためのメソッド ハンドルが含まれるメッセージ キューのファクトリ クラスを定義できます。が実装されています。具体的な実装は次のとおりです。

namespace appjob;

use thinkqueueJob;

class MyJob
{
    public function handle(Job $job, $data)
    {
        //... 具体任务处理逻辑
        //... 执行成功,删除该消息
        $job->delete();
    }
}

ここでは、ハンドル メソッドが特定のキュー メッセージ ロジックの処理を担当する MyJob クラスを定義します。実行が成功したら、$job->delete() メソッドを呼び出してこのキュー メッセージを削除できます。

2.2 タスクの作成

Job クラスを継承することで、処理する必要のあるタスクを作成できます。たとえば、SendEmail クラスを作成し、このタスクを使用して電子メールを送信できます。

namespace appjob;

use thinkqueueJob;

class SendEmail extends Job
{
    public function handle()
    {
        // ...具体的邮件发送逻辑
        // ...任务执行完成,删除该消息
        $this->delete();
    }
}

handle メソッドでは、特定の電子メール送信ロジックを記述することができます。同時に、最後に delete メソッドを呼び出して、正常に実行されたキュー メッセージを削除することもできます。

3. タスクをキューに追加します

キュー タスクを作成した後、後続の非同期処理のためにそれをメッセージ キューに追加する必要があります。 ThinkPHP6 フレームワークでは、キュー サービス プロバイダーを使用してタスクを追加できます。

app('queue')->push(new SendEmail());

ここでは、$app['queue'] を呼び出してキュー サービス インスタンスを取得し、プッシュ メソッドを通じて SendEmail タスクをキューに追加します。

4. タスクの監視と実行

タスクがキューに追加された後は、タスクのステータスを時間内に把握し、タイムリーに処理できる必要があります。この要件には、ThinkPHP6 の Artisan Console ツールを使用できます。これは Symfony Console コンポーネントに基づく拡張機能であり、コンソールを通じていくつかの特定のコマンドを実行できるようになります。

4.1 キュー監視の開始

コンソールを起動し、コマンド ラインで次のコマンドを直接実行できます。

php think queue:work --daemon --queue default

その中で、--queue はキューの名前を指定します。カスタマイズ可能なキュー。 --daemon はバックグラウンドで実行することを意味します。

このコマンドを実行すると、キューの監視が開始され、キュー内のメッセージが 1 つずつ処理されます。

4.2 タスクの実行ステータスを監視する

キューの実行中に、モニターを使用してキューの実行ステータスを表示できます。コマンドラインで次のコマンドを実行します。

php think queue:listen --queue default --tries=3

このうち、--queue はキュー名を指定し、--tries はタスクのリトライ回数を指定します。

実行後、現在のメッセージキューのステータスと具体的な実行ステータスが出力されます。出力された情報に基づいて、タスクの状況をタイムリーに監視および処理できます。

5. 概要

キューを使用して非同期タスクを実装することにより、システムのパフォーマンスと安定性を効果的に向上させることができます。この記事では、ThinkPHP6 でキューを使用して非同期タスクを実装する方法を主に紹介し、キューの構成、タスクの作成と追加、キューの監視と実行について詳しく説明します。実際のアプリケーションで非同期タスクを処理する際に、皆様のお役に立てれば幸いです。

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

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