検索
ホームページPHPフレームワークLaravelLaravelフレームワークでのキューの使い方の紹介(コード付き)

この記事では、laravel フレームワークでのキューの使用方法を紹介します (コード付き)。必要な方は参考にしていただければ幸いです。

実際のプロジェクト開発では、テキスト メッセージの送信や電子メールの送信など、軽量のキューが必要な状況によく遭遇します。これらのタスクは、kafka や RabbitMQ などの重量のあるメッセージ キューを使用するのに十分ではありませんが、非同期、再試行が必要です。 、同時実行制御およびその他の機能。一般に、関連する機能を実装するには、Redis、Beanstalk、Amazon SQS を使用することがよくあります。Laravel は、さまざまなバックグラウンド キュー サービスに統合された API を提供します。この記事では、最も広く使用されている Redis キューを紹介します。

laravelのキューサービスを説明する前に、まずredisベースのキューサービスについて話す必要があります。まず第一に、redis はキャッシュ用に設計されていますが、その独自の特性のいくつかにより、メッセージ キューにも使用できます

redis キュー データ構造

リスト リンク リスト

FIFO などのメッセージ キューの redis 機能 (最初に、 in-first-out) (out) は実装が簡単で、先頭からデータを取得し、末尾からデータを詰め込むためのリスト オブジェクトが必要なだけです。

関連コマンド: (1) 左インおよび右アウト: lpush/rpop; (2) 右インおよび左アウト: rpush/lpop。

このシンプルなメッセージキューは実装が簡単です。

Zset 順序セット

一部のタスク シナリオでは、タスクをすぐに実行する必要はありませんが、遅延する必要があるタスクもあります。タスクが失敗した場合は再試行する必要があります。これらの機能は、リストに依存するだけでは実現できません。現時点では、順序付けられた Redis のコレクションが必要です。

Redis 順序付きセットは Redis セットに似ており、同じ文字列を含まないコレクションです。それらの違いは、順序付きセットの各メンバーがスコアに関連付けられていることです。スコアは、順序付きセットのメンバーを最低スコアから最高スコアまでランク付けするために使用されます。

順序付きセットと遅延タスク単独の間には関係はありませんが、順序付きセットのスコアを遅延タスクの開始時刻に設定し、順序付きセットをポーリングして期限切れのタスクを処理用に取り出すことができます。このようにして、タスクを遅延させる機能が実現される。

再試行が必要な重要なタスクの場合、タスクが実行される前に、タスクは順序付きコレクションに入れられ、タスクの最長実行時間が設定されます。タスクが正常に実行されると、タスクは順序付けられたコレクションから削除されます。指定された時間内にタスクが完了しない場合、順序付きセット内のタスクはキューに戻されます。

関連コマンド:

(1) ZADD 順序付きセットに 1 つ以上のメンバーを追加するか、既に存在する場合はそのスコアを更新します。

(2) ZRANGEBYSCORE スコアによって順序付けられたメンバー範囲のセットを返します。

(3) ZREMRANGEBYRANK 指定されたインデックス内の順序付きセットからすべてのメンバーを削除します。

laravelキューサービスのタスクスケジューリング

キューサービスのタスクスケジューリングプロセスは次のとおりです:

Laravelフレームワークでのキューの使い方の紹介(コード付き)

laravelのキューサービスは2つのプロセスによって制御され、1つはプロデューサー、もう1つはコンシューマーです。これら 2 つのプロセスは 3 つの Redis キューを操作します。そのうちの 1 つは即時タスクを担当する List と、遅延タスクと保留中のタスクを担当する 2 つの Zset です。

プロデューサーは、タスクを Redis にプッシュする責任があります。即時タスクの場合は、デフォルトで queue:default にプッシュされます。遅延タスクの場合は、queue:default:layed にプッシュされます。

コンシューマーは 2 つのキューをポーリングし、キューからタスクを継続的に取り出し、まずタスクを queue:default:reserved に入れ、次に関連するタスクを実行します。タスクが正常に実行された場合、queue:default:reserved 内のタスクは削除され、そうでない場合は queue:default:layed キューに戻されます。

laravelキューサービスの全体の流れ

タスク分散処理:

Laravelフレームワークでのキューの使い方の紹介(コード付き)

タスクプロセッサの動作:

Laravelフレームワークでのキューの使い方の紹介(コード付き)

タスクの作成

キュー設定

'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
    ],

config/queue.phpで設定
一般的に言えばデフォルトの redis 設定は上記のとおりです。 connection はデータベース内の redis の接続名です。redis クラスターを使用している場合は、キー ハッシュ タグを使用する必要があることに注意してください。 is, {default}; タスクが retry_after 時間を超えて実行されると、タスクはキューに戻されます。

タスククラスの作成

一般的に、タスククラスの構造は非常に単純で、キューがこのタスクを呼び出すために使用するハンドルメソッドのみが含まれています。

タスクを同期的に実行するのではなくキューにプッシュしたい場合は、IlluminateContractsQueueShouldQueue インターフェースを実装する必要があります。

Redis や sqs などの特定の接続にタスクをプッシュする場合は、connect 変数を設定する必要があります。

タスクを特定のキューにプッシュしたい場合は、キュー変数を設定できます。

如果想要让任务延迟推送,那么需要设置 delay 变量。

如果想要设置任务至多重试的次数,可以使用 tries 变量;

如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。

如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。

任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:

class PodcastController extends Controller
{
    public function store(Request $request)
    {
        // 创建播客...

        ProcessPodcast::dispatch($podcast);
    }
}

如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。

 ProcessPodcast::dispatch($podcast)
                ->delay(Carbon::now()->addMinutes(10));

通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:

ProcessPodcast::dispatch($podcast)->onQueue('processing');

如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:

ProcessPodcast::dispatch($podcast)->onConnection('redis
');

以上がLaravelフレームワークでのキューの使い方の紹介(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

バックエンド開発におけるLaravelのコア機能には、ルーティングシステム、Eloquentorm、移行機能、キャッシュシステム、キューシステムが含まれます。 1.ルーティングシステムは、URLマッピングを簡素化し、コードの組織とメンテナンスを改善します。 2.Eloquentormは、開発効率を改善するためにオブジェクト指向のデータ操作を提供します。 3.移行関数は、バージョン制御を介してデータベース構造を管理して、一貫性を確保します。 4.キャッシュシステムは、データベースクエリを削減し、応答速度を向上させます。 5.キューシステムは、大規模なデータを効果的に処理し、ユーザー要求のブロックを避け、全体的なパフォーマンスを改善します。

Laravelのバックエンド機能:データベース、ロジックなどLaravelのバックエンド機能:データベース、ロジックなどApr 14, 2025 am 12:04 AM

Laravelは、バックエンド開発で強く機能し、Eloquentorm、コントローラー、サービスクラスを介してデータベース操作を簡素化し、ビジネスロジックを処理し、キュー、イベント、その他の機能を提供します。 1)Eloquentormは、モデルを介してデータベーステーブルをマップしてクエリを簡素化します。 2)ビジネスロジックは、モジュール性と保守性を向上させるために、コントローラーとサービスクラスで処理されます。 3)キューシステムなどのその他の機能は、複雑なニーズの処理に役立ちます。

Laravelの汎用性:単純なサイトから複雑なシステムまでLaravelの汎用性:単純なサイトから複雑なシステムまでApr 13, 2025 am 12:13 AM

Laravel Developmentプロジェクトは、さまざまなサイズと複雑さのニーズに合う柔軟性とパワーのために選択されました。 Laravelは、ルーティングシステム、Eloquentorm、Artisan Command Lineおよびその他の機能を提供し、簡単なブログから複雑なエンタープライズレベルのシステムへの開発をサポートしています。

Laravel(PHP)vs。Python:開発環境とエコシステムLaravel(PHP)vs。Python:開発環境とエコシステムApr 12, 2025 am 12:10 AM

開発環境とエコシステムにおけるLaravelとPythonの比較は次のとおりです。1。Laravelの開発環境は簡単で、PHPと作曲家のみが必要です。 Laravelforgeなどの豊富な範囲の拡張パッケージを提供しますが、拡張パッケージのメンテナンスはタイムリーではない場合があります。 2。Pythonの開発環境もシンプルで、PythonとPIPのみが必要です。エコシステムは巨大で複数のフィールドをカバーしていますが、バージョンと依存関係の管理は複雑な場合があります。

LaravelとThe BackEnd:Webアプリケーションロジックの電源LaravelとThe BackEnd:Webアプリケーションロジックの電源Apr 11, 2025 am 11:29 AM

Laravelはバックエンドロジックでどのように役割を果たしますか?ルーティングシステム、Eloquentorm、認証と承認、イベントとリスナー、パフォーマンスの最適化を通じてバックエンド開発を簡素化および強化します。 1.ルーティングシステムにより、URL構造の定義とリクエスト処理ロジックが可能になります。 2.Eloquentormは、データベースの相互作用を簡素化します。 3.認証および承認システムは、ユーザー管理に便利です。 4.イベントとリスナーは、ゆるく結合したコード構造を実装します。 5.パフォーマンスの最適化により、キャッシュとキューイングを通じてアプリケーションの効率が向上します。

Laravelがそんなに人気があるのはなぜですか?Laravelがそんなに人気があるのはなぜですか?Apr 02, 2025 pm 02:16 PM

Laravelの人気には、単純化された開発プロセスが含まれ、快適な開発環境を提供し、豊富な機能が提供されます。 1)Rubyonrailsの設計哲学を吸収し、PHPの柔軟性を組み合わせています。 2)Eloquentorm、Bladeテンプレートエンジンなどのツールを提供して、開発効率を向上させます。 3)そのMVCアーキテクチャと依存関係噴射メカニズムにより、コードがよりモジュール化され、テスト可能になります。 4)キャッシュシステムやベストプラクティスなどの強力なデバッグツールとパフォーマンス最適化方法を提供します。

どちらが良いのか、DjangoとLaravel?どちらが良いのか、DjangoとLaravel?Mar 28, 2025 am 10:41 AM

DjangoとLaravelはどちらもフルスタックのフレームワークです。 DjangoはPython開発者や複雑なビジネスロジックに適していますが、LaravelはPHP開発者とエレガントな構文に適しています。 1.DjangoはPythonに基づいており、迅速な発展と高い並行性に適した「バッテリーコンプリート」哲学に従います。 2. LaravelはPHPに基づいており、開発者エクスペリエンスを強調しており、小規模から中規模のプロジェクトに適しています。

どちらがより良いPHPですか、それともLaravelですか?どちらがより良いPHPですか、それともLaravelですか?Mar 27, 2025 pm 05:31 PM

LaravelはPHPベースのフレームワークであるため、PHPとLaravelは直接匹敵するものではありません。 1.PHPは、シンプルで直接的であるため、小規模プロジェクトや迅速なプロトタイピングに適しています。 2。LARAVELは、豊富な機能とツールを提供するため、大規模なプロジェクトや効率的な開発に適していますが、急な学習曲線があり、純粋なPHPほど良くない場合があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール